Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormyheroyuki <myheroyuki@outlook.com>2023-05-05 15:32:28 +0300
committermyheroyuki <myheroyuki@outlook.com>2023-05-05 15:32:28 +0300
commitfc199fcbeb679bb42c3ef7c3d8eefb41465c1b7f (patch)
treef37b44f0042ed2c5d9166ff7a712e70216216b28
parentdf4eed2e91ead65eaad52dd7210780223d200dc2 (diff)
more incremental GTK4 changes
-rw-r--r--src/rcw.c69
-rw-r--r--src/remmina_main.c1
-rw-r--r--src/remmina_pref_dialog.c2
-rw-r--r--src/remmina_scrolled_viewport.c72
-rw-r--r--src/remmina_ssh_plugin.c2
5 files changed, 82 insertions, 64 deletions
diff --git a/src/rcw.c b/src/rcw.c
index 474c8e8ce..2d3694ef4 100644
--- a/src/rcw.c
+++ b/src/rcw.c
@@ -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);