Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for notebook tab drag and drop, fixes issues #529 #478 #531

Merged
merged 1 commit into from
Mar 28, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 34 additions & 18 deletions remmina/src/remmina_connection_window.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,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);

static void remmina_connection_window_class_init(RemminaConnectionWindowClass* klass)
{
Expand Down Expand Up @@ -1070,7 +1072,7 @@ static void remmina_connection_holder_toolbar_tools(GtkWidget* widget, RemminaCo
menuitem = gtk_menu_item_new_with_label(
g_strdup(keystroke_values[strlen(keystroke_values[0]) ? 0 : 1]));
g_object_set_data(G_OBJECT(menuitem), "keystrokes", g_strdup(keystroke_values[1]));
g_signal_connect_swapped(G_OBJECT(menuitem), "activate",
g_signal_connect_swapped(G_OBJECT(menuitem), "activate",
G_CALLBACK(remmina_protocol_widget_send_keystrokes),
REMMINA_PROTOCOL_WIDGET(cnnobj->proto));
gtk_widget_show(menuitem);
Expand Down Expand Up @@ -1813,22 +1815,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");
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);
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
/* 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);
}
}

Expand Down Expand Up @@ -1923,6 +1927,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;

Expand All @@ -1939,12 +1944,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*
Expand Down