diff options
author | myheroyuki <myheroyuki@outlook.com> | 2023-05-05 15:32:28 +0300 |
---|---|---|
committer | myheroyuki <myheroyuki@outlook.com> | 2023-05-05 15:32:28 +0300 |
commit | fc199fcbeb679bb42c3ef7c3d8eefb41465c1b7f (patch) | |
tree | f37b44f0042ed2c5d9166ff7a712e70216216b28 | |
parent | df4eed2e91ead65eaad52dd7210780223d200dc2 (diff) |
more incremental GTK4 changes
-rw-r--r-- | src/rcw.c | 69 | ||||
-rw-r--r-- | src/remmina_main.c | 1 | ||||
-rw-r--r-- | src/remmina_pref_dialog.c | 2 | ||||
-rw-r--r-- | src/remmina_scrolled_viewport.c | 72 | ||||
-rw-r--r-- | src/remmina_ssh_plugin.c | 2 |
5 files changed, 82 insertions, 64 deletions
@@ -646,6 +646,15 @@ static void rcw_close_all_connections(RemminaConnectionWindow *cnnwin) } } +void rcw_delete_response( GtkDialog* self, gint response_id, gpointer user_data){ + gtk_window_destroy(self); + if (response_id != GTK_RESPONSE_YES){ + return; + } + rcw_close_all_connections(user_data); + +} + gboolean rcw_delete(RemminaConnectionWindow *cnnwin) { TRACE_CALL(__func__); @@ -680,14 +689,13 @@ gboolean rcw_delete(RemminaConnectionWindow *cnnwin) dialog = gtk_message_dialog_new(GTK_WINDOW(cnnwin), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure you want to close this last active connection?")); - //i = gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_window_destroy(dialog); - if (i != GTK_RESPONSE_YES) - return FALSE; + gtk_window_set_modal(dialog, TRUE); + g_signal_connect(dialog, "response", rcw_delete_response, cnnwin); + gtk_widget_show(dialog); } } } - rcw_close_all_connections(cnnwin); + return TRUE; } @@ -1301,13 +1309,21 @@ static void rcw_migrate(RemminaConnectionWindow *from, RemminaConnectionWindow * /* Reparent the viewport (which is inside scrolled_container) to the new page */ g_object_ref(cnnobj->viewport); - //gtk_container_remove(GTK_CONTAINER(old_scrolled_container), cnnobj->viewport); - gtk_box_append(GTK_BOX(cnnobj->scrolled_container), cnnobj->viewport); - g_object_unref(cnnobj->viewport); + if (GTK_IS_SCROLLED_WINDOW(cnnobj->scrolled_container)){ + gtk_box_remove((old_scrolled_container), cnnobj->viewport); + gtk_scrolled_window_set_child((cnnobj->scrolled_container), cnnobj->viewport); + g_object_unref(cnnobj->viewport); + } + else{ + gtk_scrolled_window_set_child((old_scrolled_container), NULL); + gtk_box_append(GTK_BOX(cnnobj->scrolled_container), cnnobj->viewport); + g_object_unref(cnnobj->viewport); + } + /* Destroy old scrolled_container. Not really needed, it will be destroyed * when removing the page from the notepad */ - gtk_window_destroy(old_scrolled_container); + gtk_box_remove(frompage, old_scrolled_container); } @@ -1321,7 +1337,7 @@ static void rcw_migrate(RemminaConnectionWindow *from, RemminaConnectionWindow * static void rcw_switch_viewmode(RemminaConnectionWindow *cnnwin, int newmode) { - //GdkSurfaceState s; + gboolean is_maximized; RemminaConnectionWindow *newwin; gint old_width, old_height; int old_mode; @@ -1334,13 +1350,13 @@ static void rcw_switch_viewmode(RemminaConnectionWindow *cnnwin, int newmode) if (old_mode == SCROLLED_WINDOW_MODE) { /* We are leaving SCROLLED_WINDOW_MODE, save W,H, and maximized * status before self destruction of cnnwin */ - //gtk_window_get_size(GTK_WINDOW(cnnwin), &old_width, &old_height); - //s = gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(cnnwin))); + gtk_window_get_default_size(GTK_WINDOW(cnnwin), &old_width, &old_height); + is_maximized = gtk_window_is_maximized(cnnwin); } newwin = rcw_create_fullscreen(GTK_WINDOW(cnnwin), cnnwin->priv->fss_view_mode); rcw_migrate(cnnwin, newwin); if (old_mode == SCROLLED_WINDOW_MODE) { - //newwin->priv->ss_maximized = (s & GDK_WINDOW_STATE_MAXIMIZED) ? TRUE : FALSE; TODO GTK4 + newwin->priv->ss_maximized = is_maximized; newwin->priv->ss_width = old_width; newwin->priv->ss_height = old_height; } @@ -2031,7 +2047,7 @@ static void rcw_toolbar_tools(GtkWidget *toggle, RemminaConnectionWindow *cnnwin const RemminaProtocolFeature *feature; GtkWidget *menu; GtkWidget *menuitem = NULL; - GtkPopoverMenu *submenu_keystrokes; + GtkPopover *submenu_keystrokes; const gchar *domain; gboolean enabled; gchar **keystrokes; @@ -2061,6 +2077,7 @@ static void rcw_toolbar_tools(GtkWidget *toggle, RemminaConnectionWindow *cnnwin rcw_set_tooltip(menuitem, "", GPOINTER_TO_UINT(feature->opt3), 0); gtk_widget_show(menuitem); //gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + //gtk_box_append(menuitem); enabled = remmina_protocol_widget_query_feature_by_ref(REMMINA_PROTOCOL_WIDGET(cnnobj->proto), feature); if (enabled) { @@ -2080,7 +2097,7 @@ static void rcw_toolbar_tools(GtkWidget *toggle, RemminaConnectionWindow *cnnwin if (g_strv_length(keystrokes)) { /* Add a keystrokes submenu */ menuitem = gtk_button_new_with_label(_("Keystrokes")); - submenu_keystrokes = GTK_POPOVER_MENU(gtk_popover_new()); + submenu_keystrokes = GTK_POPOVER_MENU(gtk_popover_menu_new_from_model(NULL)); gtk_button_set_child(GTK_BUTTON(menuitem), GTK_WIDGET(submenu_keystrokes)); gtk_widget_show(menuitem); //gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); @@ -2293,7 +2310,7 @@ static void rcw_toolbar_minimize(GtkWidget *toggle, RemminaConnectionWindow *cnn return; rcw_floating_toolbar_show(cnnwin, FALSE); - //gtk_toplevel_minimize(GTK_WINDOW(cnnwin)); + gdk_toplevel_minimize(GTK_WINDOW(cnnwin)); } static void rcw_toolbar_disconnect(GtkWidget *toggle, RemminaConnectionWindow *cnnwin) @@ -2361,7 +2378,7 @@ rcw_create_toolbar(RemminaConnectionWindow *cnnwin, gint mode) /* Menu */ toolitem = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(toolitem), "view-more-symbolic"); - gtk_button_set_label(GTK_BUTTON(toolitem), _("_Menu")); + //gtk_button_set_label(GTK_BUTTON(toolitem), _("_Menu")); gtk_widget_set_tooltip_text(toolitem, _("Menu")); gtk_box_append((toolbar), toolitem); gtk_widget_show(GTK_WIDGET(toolitem)); @@ -2557,7 +2574,6 @@ rcw_create_toolbar(RemminaConnectionWindow *cnnwin, gint mode) /* Tools */ toolitem = gtk_toggle_button_new(); gtk_button_set_icon_name(GTK_BUTTON(toolitem), "org.remmina.Remmina-system-run-symbolic"); - gtk_button_set_label(GTK_BUTTON(toolitem), _("_Tools")); gtk_widget_set_tooltip_text(toolitem, _("Tools")); gtk_box_append(GTK_BOX(toolbar), toolitem); gtk_widget_show(GTK_WIDGET(toolitem)); @@ -2801,7 +2817,7 @@ static void print_crossing_event(GdkEventCrossing *event) { } #endif -static gboolean rcw_floating_toolbar_on_enter(GtkWidget *widget, GdkCrossingEvent *event, +static gboolean rcw_floating_toolbar_on_enter(GtkWidget* self, gdouble x, gdouble y, RemminaConnectionWindow *cnnwin) { TRACE_CALL(__func__); @@ -3098,7 +3114,7 @@ static gboolean rcw_after_configure_scrolled(gpointer user_data) cnnobj = g_object_get_data( G_OBJECT(gtk_notebook_get_nth_page(GTK_NOTEBOOK(cnnwin->priv->notebook), ipg)), "cnnobj"); - if (GDK_TOPLEVEL_STATE_MAXIMIZED) { + if (gtk_window_is_maximized(cnnwin)) { remmina_file_set_int(cnnobj->remmina_file, "window_maximize", TRUE); } else { //gtk_window_get_size(GTK_WINDOW(cnnobj->cnnwin), &width, &height); @@ -3794,7 +3810,7 @@ rcw_on_notebook_create_window(GtkNotebook *notebook, GtkWidget *page, gint x, gi * the dropped connectionand move our cnnobj there. Width and * height of the new window are cloned from the current window */ srctag = (gchar *)g_object_get_data(G_OBJECT(srccnnwin), "tag"); - //gtk_window_get_size(GTK_WINDOW(srccnnwin), &width, &height); + gtk_window_get_default_size(GTK_WINDOW(srccnnwin), &width, &height); dstcnnwin = rcw_create_scrolled(width, height, FALSE); // New dropped window is never maximized g_object_set_data_full(G_OBJECT(dstcnnwin), "tag", g_strdup(srctag), (GDestroyNotify)g_free); /* when returning, GTK will move the whole tab to the new notebook. @@ -3948,7 +3964,7 @@ static void rcw_create_overlay_ftb_overlay(RemminaConnectionWindow *cnnwin) } - gtk_revealer_set_child(GTK_BOX(revealer), priv->floating_toolbar_widget); + gtk_revealer_set_child((revealer), priv->floating_toolbar_widget); gtk_widget_set_halign(GTK_WIDGET(revealer), GTK_ALIGN_CENTER); gtk_widget_set_valign(GTK_WIDGET(revealer), GTK_ALIGN_START); @@ -3958,7 +3974,7 @@ static void rcw_create_overlay_ftb_overlay(RemminaConnectionWindow *cnnwin) fr = gtk_frame_new(NULL); gtk_box_append(GTK_BOX(priv->overlay_ftb_overlay), fr); - gtk_frame_set_child(GTK_BOX(fr), vbox); + gtk_frame_set_child((fr), vbox); gtk_widget_show(vbox); gtk_widget_show(revealer); @@ -4108,8 +4124,8 @@ RemminaConnectionWindow *rcw_create_fullscreen(GtkWindow *old, gint view_mode) notebook = rcw_create_notebook(cnnwin); cnnwin->priv->overlay = gtk_overlay_new(); - gtk_box_append(GTK_BOX(cnnwin), cnnwin->priv->overlay); - gtk_box_append(GTK_BOX(cnnwin->priv->overlay), GTK_WIDGET(notebook)); + gtk_window_set_child((cnnwin), cnnwin->priv->overlay); + gtk_overlay_set_child((cnnwin->priv->overlay), GTK_WIDGET(notebook)); gtk_widget_show(GTK_WIDGET(cnnwin->priv->overlay)); cnnwin->priv->notebook = notebook; @@ -4430,7 +4446,8 @@ void rco_on_disconnect(RemminaProtocolWidget *gp, gpointer data) /* Destroy scrolled_container (and viewport) and all its children the plugin created * on it, so they will not receive GUI signals */ if (cnnobj->scrolled_container) { - gtk_window_destroy(cnnobj->scrolled_container); + gtk_widget_unparent(cnnobj->scrolled_container); + //g_object_unref(cnnobj->scrolled_container); cnnobj->scrolled_container = NULL; } cnnobj->viewport = NULL; diff --git a/src/remmina_main.c b/src/remmina_main.c index 451ed9c0d..b20c90188 100644 --- a/src/remmina_main.c +++ b/src/remmina_main.c @@ -1493,7 +1493,6 @@ static gboolean remmina_main_add_tool_plugin(gchar *name, RemminaPlugin *plugin, gtk_widget_show(menuitem); //gtk_menu_shell_append(GTK_MENU_SHELL(remminamain->menu_popup_full), menuitem); - REMMINA_DEBUG("\n\n\ndo we add this window?\n\n\n"); g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(tool_plugin->exec_func), tool_plugin); return FALSE; } diff --git a/src/remmina_pref_dialog.c b/src/remmina_pref_dialog.c index 1402319ec..bc00c1c14 100644 --- a/src/remmina_pref_dialog.c +++ b/src/remmina_pref_dialog.c @@ -819,7 +819,7 @@ GtkWidget *remmina_pref_dialog_new(gint default_tab, GtkWindow *parent) _("This file contains the “Custom” terminal colour scheme selectable from the “Advanced” tab of terminal connections and editable in the “Terminal” tab in the settings."), NULL); gtk_widget_set_tooltip_text(GTK_WIDGET(remmina_pref_dialog->button_term_cs), fc_tooltip_text); - gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(remmina_pref_dialog->button_term_cs), REMMINA_RUNTIME_TERM_CS_DIR, NULL); + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(remmina_pref_dialog->button_term_cs), g_file_new_for_path(REMMINA_RUNTIME_TERM_CS_DIR), NULL); g_free(destpath); #endif #endif diff --git a/src/remmina_scrolled_viewport.c b/src/remmina_scrolled_viewport.c index 96e99d3b5..e71ca387c 100644 --- a/src/remmina_scrolled_viewport.c +++ b/src/remmina_scrolled_viewport.c @@ -78,7 +78,7 @@ static gboolean remmina_scrolled_viewport_motion_timeout(gpointer data) GdkDeviceManager *device_manager; #endif GdkDevice *pointer; - //GdkScreen *screen; //TODO GTK4 fix screen changes + GdkDisplay *screen; //TODO GTK4 fix screen changes GdkSurface *gsvwin; gint x, y, mx, my, w, h, rootx, rooty; GtkAdjustment *adj; @@ -92,12 +92,12 @@ static gboolean remmina_scrolled_viewport_motion_timeout(gpointer data) gsv->viewport_motion_handler = 0; return FALSE; } - // if (!GTK_IS_BIN(data)) { - // gsv->viewport_motion_handler = 0; - // return FALSE; - // } + if (gtk_widget_get_first_child(data) == NULL) { + gsv->viewport_motion_handler = 0; + return FALSE; + } - //child = gtk_bin_get_child(GTK_BIN(gsv)); + child = gtk_widget_get_first_child((gsv)); if (!GTK_IS_VIEWPORT(child)) { gsv->viewport_motion_handler = 0; return FALSE; @@ -119,46 +119,46 @@ static gboolean remmina_scrolled_viewport_motion_timeout(gpointer data) device_manager = gdk_display_get_device_manager(display); pointer = gdk_device_manager_get_client_pointer(device_manager); #endif - //gdk_device_get_position(pointer, &screen, &x, &y); + // gdk_device_get_position(pointer, &screen, &x, &y); - w = gdk_surface_get_width(gsvwin) + SCROLL_BORDER_SIZE; // Add 2px of black scroll border - h = gdk_surface_get_height(gsvwin) + SCROLL_BORDER_SIZE; // Add 2px of black scroll border + // w = gdk_surface_get_width(gsvwin) + SCROLL_BORDER_SIZE; // Add 2px of black scroll border + // h = gdk_surface_get_height(gsvwin) + SCROLL_BORDER_SIZE; // Add 2px of black scroll border - //gdk_window_get_root_origin(gsvwin, &rootx, &rooty ); + // gdk_window_get_root_origin(gsvwin, &rootx, &rooty ); - x -= rootx; - y -= rooty; + // x -= rootx; + // y -= rooty; - mx = (x <= 0 ? -1 : (x >= w - 1 ? 1 : 0)); - my = (y <= 0 ? -1 : (y >= h - 1 ? 1 : 0)); - if (mx != 0) { - gint step = MAX(10, MIN(remmina_pref.auto_scroll_step, w / 5)); - adj = gtk_scrollable_get_hadjustment(GTK_SCROLLABLE(child)); - value = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj)) + (gdouble)(mx * step); - value = MAX(0, MIN(value, gtk_adjustment_get_upper(GTK_ADJUSTMENT(adj)) - (gdouble)w + 2.0)); - gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), value); - } - if (my != 0) { - gint step = MAX(10, MIN(remmina_pref.auto_scroll_step, h / 5)); - adj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(child)); - value = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj)) + (gdouble)(my * step); - value = MAX(0, MIN(value, gtk_adjustment_get_upper(GTK_ADJUSTMENT(adj)) - (gdouble)h + 2.0)); - gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), value); - } - return TRUE; + // mx = (x <= 0 ? -1 : (x >= w - 1 ? 1 : 0)); + // my = (y <= 0 ? -1 : (y >= h - 1 ? 1 : 0)); + // if (mx != 0) { + // gint step = MAX(10, MIN(remmina_pref.auto_scroll_step, w / 5)); + // adj = gtk_scrollable_get_hadjustment(GTK_SCROLLABLE(child)); + // value = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj)) + (gdouble)(mx * step); + // value = MAX(0, MIN(value, gtk_adjustment_get_upper(GTK_ADJUSTMENT(adj)) - (gdouble)w + 2.0)); + // gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), value); + // } + // if (my != 0) { + // gint step = MAX(10, MIN(remmina_pref.auto_scroll_step, h / 5)); + // adj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(child)); + // value = gtk_adjustment_get_value(GTK_ADJUSTMENT(adj)) + (gdouble)(my * step); + // value = MAX(0, MIN(value, gtk_adjustment_get_upper(GTK_ADJUSTMENT(adj)) - (gdouble)h + 2.0)); + // gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), value); + // } + // return TRUE; TODO GTK4 } -static gboolean remmina_scrolled_viewport_enter(GtkWidget *widget, GdkCrossingEvent *event, gpointer data) +static gboolean remmina_scrolled_viewport_enter(GtkWidget *self, gdouble x, gdouble y, gpointer data) { TRACE_CALL(__func__); - remmina_scrolled_viewport_remove_motion(REMMINA_SCROLLED_VIEWPORT(widget)); + remmina_scrolled_viewport_remove_motion(REMMINA_SCROLLED_VIEWPORT(data)); return FALSE; } -static gboolean remmina_scrolled_viewport_leave(GtkWidget *widget, GdkCrossingEvent *event, gpointer data) +static gboolean remmina_scrolled_viewport_leave(GtkWidget *self, gpointer data) { TRACE_CALL(__func__); - RemminaScrolledViewport *gsv = REMMINA_SCROLLED_VIEWPORT(widget); + RemminaScrolledViewport *gsv = REMMINA_SCROLLED_VIEWPORT(data); if (gsv->viewport_motion_handler) { REMMINA_DEBUG("cleaning motion ..."); remmina_scrolled_viewport_remove_motion(gsv); @@ -211,9 +211,11 @@ remmina_scrolled_viewport_new(void) gtk_widget_set_size_request(GTK_WIDGET(gsv), 1, 1); //gtk_widget_add_events(GTK_WIDGET(gsv), GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); //TODO GTK4 + GtkEventController* motion_event_controller = gtk_event_controller_motion_new(); + gtk_widget_add_controller(gsv, motion_event_controller); g_signal_connect(G_OBJECT(gsv), "destroy", G_CALLBACK(remmina_scrolled_viewport_destroy), NULL); - g_signal_connect(G_OBJECT(gsv), "enter-notify-event", G_CALLBACK(remmina_scrolled_viewport_enter), NULL); - g_signal_connect(G_OBJECT(gsv), "leave-notify-event", G_CALLBACK(remmina_scrolled_viewport_leave), NULL); + g_signal_connect(G_OBJECT(motion_event_controller), "enter", G_CALLBACK(remmina_scrolled_viewport_enter), gsv); + g_signal_connect(G_OBJECT(motion_event_controller), "leave", G_CALLBACK(remmina_scrolled_viewport_leave), gsv); return GTK_WIDGET(gsv); } diff --git a/src/remmina_ssh_plugin.c b/src/remmina_ssh_plugin.c index e0ff7f7d2..ca29c4bae 100644 --- a/src/remmina_ssh_plugin.c +++ b/src/remmina_ssh_plugin.c @@ -1285,7 +1285,7 @@ remmina_plugin_ssh_init(RemminaProtocolWidget *gp) gpdata->vte_session_file = g_file_new_for_path(fp); g_free(fp); - g_signal_connect(G_OBJECT(vte), "size-allocate", G_CALLBACK(remmina_plugin_ssh_on_size_allocate), gp); + g_signal_connect(G_OBJECT(vte), "size-allocate", G_CALLBACK(remmina_plugin_ssh_on_size_allocate), gp); //TODO GTK4 g_signal_connect(G_OBJECT(vte), "unrealize", G_CALLBACK(remmina_plugin_ssh_eof), gp); g_signal_connect(G_OBJECT(vte), "eof", G_CALLBACK(remmina_plugin_ssh_eof), gp); g_signal_connect(G_OBJECT(vte), "child-exited", G_CALLBACK(remmina_plugin_ssh_eof), gp); |