mirror of https://github.com/GNOME/gimp.git
Bug 701090: allowing to reorder shell tabs by drag'n drop in single-window-mode.
This commit is contained in:
parent
11f8135b2c
commit
34a197e304
|
@ -55,6 +55,10 @@ static void windows_actions_display_add (GimpContainer *conta
|
|||
static void windows_actions_display_remove (GimpContainer *container,
|
||||
GimpDisplay *display,
|
||||
GimpActionGroup *group);
|
||||
static void windows_actions_display_reorder (GimpContainer *container,
|
||||
GimpDisplay *display,
|
||||
gint position,
|
||||
GimpActionGroup *group);
|
||||
static void windows_actions_image_notify (GimpDisplay *display,
|
||||
const GParamSpec *unused,
|
||||
GimpActionGroup *group);
|
||||
|
@ -148,6 +152,9 @@ windows_actions_setup (GimpActionGroup *group)
|
|||
g_signal_connect_object (group->gimp->displays, "remove",
|
||||
G_CALLBACK (windows_actions_display_remove),
|
||||
group, 0);
|
||||
g_signal_connect_object (group->gimp->displays, "reorder",
|
||||
G_CALLBACK (windows_actions_display_reorder),
|
||||
group, 0);
|
||||
|
||||
for (list = gimp_get_display_iter (group->gimp);
|
||||
list;
|
||||
|
@ -254,6 +261,15 @@ windows_actions_display_remove (GimpContainer *container,
|
|||
windows_actions_update_display_accels (group);
|
||||
}
|
||||
|
||||
static void
|
||||
windows_actions_display_reorder (GimpContainer *container,
|
||||
GimpDisplay *display,
|
||||
gint new_index,
|
||||
GimpActionGroup *group)
|
||||
{
|
||||
windows_actions_update_display_accels (group);
|
||||
}
|
||||
|
||||
static void
|
||||
windows_actions_image_notify (GimpDisplay *display,
|
||||
const GParamSpec *unused,
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "core/gimpcontext.h"
|
||||
#include "core/gimpimage.h"
|
||||
#include "core/gimpprogress.h"
|
||||
#include "core/gimpcontainer.h"
|
||||
|
||||
#include "widgets/gimpactiongroup.h"
|
||||
#include "widgets/gimpdialogfactory.h"
|
||||
|
@ -199,6 +200,10 @@ static void gimp_image_window_page_removed (GtkNotebook *not
|
|||
GtkWidget *widget,
|
||||
gint page_num,
|
||||
GimpImageWindow *window);
|
||||
static void gimp_image_window_page_reordered (GtkNotebook *notebook,
|
||||
GtkWidget *widget,
|
||||
gint page_num,
|
||||
GimpImageWindow *window);
|
||||
static void gimp_image_window_disconnect_from_active_shell
|
||||
(GimpImageWindow *window);
|
||||
|
||||
|
@ -412,6 +417,9 @@ gimp_image_window_constructed (GObject *object)
|
|||
g_signal_connect (private->notebook, "page-removed",
|
||||
G_CALLBACK (gimp_image_window_page_removed),
|
||||
window);
|
||||
g_signal_connect (private->notebook, "page-reordered",
|
||||
G_CALLBACK (gimp_image_window_page_reordered),
|
||||
window);
|
||||
gtk_widget_show (private->notebook);
|
||||
|
||||
/* Create the right dock columns widget */
|
||||
|
@ -1055,6 +1063,8 @@ gimp_image_window_add_shell (GimpImageWindow *window,
|
|||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (private->notebook),
|
||||
GTK_WIDGET (shell), tab_label);
|
||||
gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (private->notebook),
|
||||
GTK_WIDGET (shell), TRUE);
|
||||
|
||||
gtk_widget_show (GTK_WIDGET (shell));
|
||||
}
|
||||
|
@ -1718,6 +1728,20 @@ gimp_image_window_page_removed (GtkNotebook *notebook,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_image_window_page_reordered (GtkNotebook *notebook,
|
||||
GtkWidget *widget,
|
||||
gint page_num,
|
||||
GimpImageWindow *window)
|
||||
{
|
||||
GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window);
|
||||
GimpContainer *displays = private->gimp->displays;
|
||||
|
||||
/* We need to reorder the displays as well in order to update the
|
||||
* numbered accelerators (alt-1, alt-2, etc.). */
|
||||
gimp_container_reorder (displays, GIMP_OBJECT (GIMP_DISPLAY_SHELL (widget)->display), page_num);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_image_window_disconnect_from_active_shell (GimpImageWindow *window)
|
||||
{
|
||||
|
|
|
@ -54,6 +54,10 @@ static void windows_menu_display_add (GimpContainer *con
|
|||
static void windows_menu_display_remove (GimpContainer *container,
|
||||
GimpDisplay *display,
|
||||
GimpUIManager *manager);
|
||||
static void windows_menu_display_reorder (GimpContainer *container,
|
||||
GimpDisplay *display,
|
||||
gint new_index,
|
||||
GimpUIManager *manager);
|
||||
static void windows_menu_image_notify (GimpDisplay *display,
|
||||
const GParamSpec *unused,
|
||||
GimpUIManager *manager);
|
||||
|
@ -96,6 +100,9 @@ windows_menu_setup (GimpUIManager *manager,
|
|||
g_signal_connect_object (manager->gimp->displays, "remove",
|
||||
G_CALLBACK (windows_menu_display_remove),
|
||||
manager, 0);
|
||||
g_signal_connect_object (manager->gimp->displays, "reorder",
|
||||
G_CALLBACK (windows_menu_display_reorder),
|
||||
manager, 0);
|
||||
|
||||
for (list = gimp_get_display_iter (manager->gimp);
|
||||
list;
|
||||
|
@ -178,6 +185,35 @@ windows_menu_display_remove (GimpContainer *container,
|
|||
g_free (merge_key);
|
||||
}
|
||||
|
||||
static void
|
||||
windows_menu_display_reorder (GimpContainer *container,
|
||||
GimpDisplay *display,
|
||||
gint new_index,
|
||||
GimpUIManager *manager)
|
||||
{
|
||||
gint n_display = gimp_container_get_n_children (container);
|
||||
gint i;
|
||||
|
||||
for (i = new_index; i < n_display; i++)
|
||||
{
|
||||
GimpObject *d = gimp_container_get_child_by_index (container, i);
|
||||
|
||||
windows_menu_display_remove (container, GIMP_DISPLAY (d), manager);
|
||||
}
|
||||
|
||||
/* If I don't ensure the menu items are effectively removed, adding
|
||||
* the same ones may simply cancel the effect of the removal, hence
|
||||
* losing the menu reordering. */
|
||||
gtk_ui_manager_ensure_update (manager);
|
||||
|
||||
for (i = new_index; i < n_display; i++)
|
||||
{
|
||||
GimpObject *d = gimp_container_get_child_by_index (container, i);
|
||||
|
||||
windows_menu_display_add (container, GIMP_DISPLAY (d), manager);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
windows_menu_image_notify (GimpDisplay *display,
|
||||
const GParamSpec *unused,
|
||||
|
|
Loading…
Reference in New Issue