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:
authorGiovanni Panozzo <giovanni@panozzo.it>2015-03-26 01:58:58 +0300
committerGiovanni Panozzo <giovanni@panozzo.it>2015-03-28 17:01:43 +0300
commit777630980f6ba3cc0779ac2a743825d49ede1d57 (patch)
treeaad196f43ece8a599d869740d37f264410c3d756
parent1ce4c2195016eb70090c1c1a8d99103bb892d26b (diff)
Fix for notebook tab drag and drop, fixes issues #529 #478oldmaster
-rw-r--r--remmina/src/remmina_connection_window.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/remmina/src/remmina_connection_window.c b/remmina/src/remmina_connection_window.c
index e40ba7f53..5bc123cdd 100644
--- a/remmina/src/remmina_connection_window.c
+++ b/remmina/src/remmina_connection_window.c
@@ -139,6 +139,8 @@ struct _RemminaConnectionHolder
static void remmina_connection_holder_create_scrolled(RemminaConnectionHolder* cnnhld, RemminaConnectionObject* cnnobj);
static void remmina_connection_holder_create_fullscreen(RemminaConnectionHolder* cnnhld, RemminaConnectionObject* cnnobj,
gint view_mode);
+static gboolean remmina_connection_window_hostkey_func(RemminaProtocolWidget* gp, guint keyval, gboolean release,
+ RemminaConnectionHolder* cnnhld);
#if GTK_VERSION == 3
static void remmina_connection_window_class_init(RemminaConnectionWindowClass* klass)
@@ -1995,28 +1997,24 @@ static void remmina_connection_window_initialize_notebook(GtkNotebook* to, GtkNo
else
{
/* View mode changed. Migrate all existing connections to the new notebook */
- c = gtk_notebook_get_current_page(from);
- n = gtk_notebook_get_n_pages(from);
- for (i = 0; i < n; i++)
- {
- widget = gtk_notebook_get_nth_page(from, i);
- cnnobj = (RemminaConnectionObject*) g_object_get_data(G_OBJECT(widget), "cnnobj");
-
- tab = remmina_connection_object_create_tab(cnnobj);
- remmina_connection_object_append_page(cnnobj, to, tab, view_mode);
-
-#if GTK_VERSION == 3
- /* Reparent cnnobj->viewport */
- g_object_ref(cnnobj->viewport);
- gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(cnnobj->viewport)), cnnobj->viewport);
- gtk_container_add(GTK_CONTAINER(cnnobj->scrolled_container), cnnobj->viewport );
- g_object_unref(cnnobj->viewport);
-#elif GTK_VERSION == 2
- gtk_widget_reparent(cnnobj->viewport, cnnobj->scrolled_container);
-#endif
+ if (from != NULL && GTK_IS_NOTEBOOK(from)) {
+ c = gtk_notebook_get_current_page(from);
+ n = gtk_notebook_get_n_pages(from);
+ for (i = 0; i < n; i++)
+ {
+ widget = gtk_notebook_get_nth_page(from, i);
+ cnnobj = (RemminaConnectionObject*) g_object_get_data(G_OBJECT(widget), "cnnobj");
+
+ tab = remmina_connection_object_create_tab(cnnobj);
+ remmina_connection_object_append_page(cnnobj, to, tab, view_mode);
+ /* Reparent cnnobj->viewport */
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ gtk_widget_reparent(cnnobj->viewport, cnnobj->scrolled_container);
+ G_GNUC_END_IGNORE_DEPRECATIONS
+ }
+ gtk_notebook_set_current_page(to, c);
}
- gtk_notebook_set_current_page(to, c);
}
}
@@ -2109,6 +2107,7 @@ remmina_connection_holder_on_notebook_create_window(GtkNotebook* notebook, GtkWi
srccnnwin = REMMINA_CONNECTION_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(notebook)));
dstcnnwin = REMMINA_CONNECTION_WINDOW(remmina_widget_pool_find_by_window(REMMINA_TYPE_CONNECTION_WINDOW, window));
+
if (srccnnwin == dstcnnwin)
return NULL;
@@ -2125,12 +2124,23 @@ remmina_connection_holder_on_notebook_create_window(GtkNotebook* notebook, GtkWi
else
{
cnnobj->cnnhld = g_new0(RemminaConnectionHolder, 1);
+ if (!cnnobj->cnnhld->cnnwin)
+ {
+ /* Create a new scrolled window to accomodate the dropped connection */
+ remmina_connection_holder_create_scrolled(cnnobj->cnnhld, NULL);
+
+ /* We must resize the new window here: remmina_connection_holder_check_resize() failed
+ * to set initial size because it has no notebook page on the window. So, we do resize
+ * manually here */
+ gtk_window_resize( GTK_WINDOW(cnnobj->cnnhld->cnnwin),
+ remmina_file_get_int (cnnobj->remmina_file, "window_width", 640),
+ remmina_file_get_int (cnnobj->remmina_file, "window_height", 480));
+ }
}
- g_signal_emit_by_name(cnnobj->proto, "connect", cnnobj);
- gtk_notebook_remove_page(GTK_NOTEBOOK(srccnnwin->priv->notebook), srcpagenum);
-
- return NULL;
+ remmina_protocol_widget_set_hostkey_func(REMMINA_PROTOCOL_WIDGET(cnnobj->proto),
+ (RemminaHostkeyFunc) remmina_connection_window_hostkey_func, cnnobj->cnnhld);
+ return GTK_NOTEBOOK(cnnobj->cnnhld->cnnwin->priv->notebook);
}
static GtkWidget*