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,
|
static void windows_actions_display_remove (GimpContainer *container,
|
||||||
GimpDisplay *display,
|
GimpDisplay *display,
|
||||||
GimpActionGroup *group);
|
GimpActionGroup *group);
|
||||||
|
static void windows_actions_display_reorder (GimpContainer *container,
|
||||||
|
GimpDisplay *display,
|
||||||
|
gint position,
|
||||||
|
GimpActionGroup *group);
|
||||||
static void windows_actions_image_notify (GimpDisplay *display,
|
static void windows_actions_image_notify (GimpDisplay *display,
|
||||||
const GParamSpec *unused,
|
const GParamSpec *unused,
|
||||||
GimpActionGroup *group);
|
GimpActionGroup *group);
|
||||||
|
@ -148,6 +152,9 @@ windows_actions_setup (GimpActionGroup *group)
|
||||||
g_signal_connect_object (group->gimp->displays, "remove",
|
g_signal_connect_object (group->gimp->displays, "remove",
|
||||||
G_CALLBACK (windows_actions_display_remove),
|
G_CALLBACK (windows_actions_display_remove),
|
||||||
group, 0);
|
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);
|
for (list = gimp_get_display_iter (group->gimp);
|
||||||
list;
|
list;
|
||||||
|
@ -254,6 +261,15 @@ windows_actions_display_remove (GimpContainer *container,
|
||||||
windows_actions_update_display_accels (group);
|
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
|
static void
|
||||||
windows_actions_image_notify (GimpDisplay *display,
|
windows_actions_image_notify (GimpDisplay *display,
|
||||||
const GParamSpec *unused,
|
const GParamSpec *unused,
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "core/gimpcontext.h"
|
#include "core/gimpcontext.h"
|
||||||
#include "core/gimpimage.h"
|
#include "core/gimpimage.h"
|
||||||
#include "core/gimpprogress.h"
|
#include "core/gimpprogress.h"
|
||||||
|
#include "core/gimpcontainer.h"
|
||||||
|
|
||||||
#include "widgets/gimpactiongroup.h"
|
#include "widgets/gimpactiongroup.h"
|
||||||
#include "widgets/gimpdialogfactory.h"
|
#include "widgets/gimpdialogfactory.h"
|
||||||
|
@ -199,6 +200,10 @@ static void gimp_image_window_page_removed (GtkNotebook *not
|
||||||
GtkWidget *widget,
|
GtkWidget *widget,
|
||||||
gint page_num,
|
gint page_num,
|
||||||
GimpImageWindow *window);
|
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
|
static void gimp_image_window_disconnect_from_active_shell
|
||||||
(GimpImageWindow *window);
|
(GimpImageWindow *window);
|
||||||
|
|
||||||
|
@ -412,6 +417,9 @@ gimp_image_window_constructed (GObject *object)
|
||||||
g_signal_connect (private->notebook, "page-removed",
|
g_signal_connect (private->notebook, "page-removed",
|
||||||
G_CALLBACK (gimp_image_window_page_removed),
|
G_CALLBACK (gimp_image_window_page_removed),
|
||||||
window);
|
window);
|
||||||
|
g_signal_connect (private->notebook, "page-reordered",
|
||||||
|
G_CALLBACK (gimp_image_window_page_reordered),
|
||||||
|
window);
|
||||||
gtk_widget_show (private->notebook);
|
gtk_widget_show (private->notebook);
|
||||||
|
|
||||||
/* Create the right dock columns widget */
|
/* 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_notebook_append_page (GTK_NOTEBOOK (private->notebook),
|
||||||
GTK_WIDGET (shell), tab_label);
|
GTK_WIDGET (shell), tab_label);
|
||||||
|
gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (private->notebook),
|
||||||
|
GTK_WIDGET (shell), TRUE);
|
||||||
|
|
||||||
gtk_widget_show (GTK_WIDGET (shell));
|
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
|
static void
|
||||||
gimp_image_window_disconnect_from_active_shell (GimpImageWindow *window)
|
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,
|
static void windows_menu_display_remove (GimpContainer *container,
|
||||||
GimpDisplay *display,
|
GimpDisplay *display,
|
||||||
GimpUIManager *manager);
|
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,
|
static void windows_menu_image_notify (GimpDisplay *display,
|
||||||
const GParamSpec *unused,
|
const GParamSpec *unused,
|
||||||
GimpUIManager *manager);
|
GimpUIManager *manager);
|
||||||
|
@ -96,6 +100,9 @@ windows_menu_setup (GimpUIManager *manager,
|
||||||
g_signal_connect_object (manager->gimp->displays, "remove",
|
g_signal_connect_object (manager->gimp->displays, "remove",
|
||||||
G_CALLBACK (windows_menu_display_remove),
|
G_CALLBACK (windows_menu_display_remove),
|
||||||
manager, 0);
|
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);
|
for (list = gimp_get_display_iter (manager->gimp);
|
||||||
list;
|
list;
|
||||||
|
@ -178,6 +185,35 @@ windows_menu_display_remove (GimpContainer *container,
|
||||||
g_free (merge_key);
|
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
|
static void
|
||||||
windows_menu_image_notify (GimpDisplay *display,
|
windows_menu_image_notify (GimpDisplay *display,
|
||||||
const GParamSpec *unused,
|
const GParamSpec *unused,
|
||||||
|
|
Loading…
Reference in New Issue