[gimp] Bug 701090: allowing to reorder shell tabs by drag'n drop in single-window-mode.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 701090: allowing to reorder shell tabs by drag'n drop in single-window-mode.
- Date: Thu, 29 Aug 2013 06:39:12 +0000 (UTC)
commit 34a197e3044b6abe8060e8ac6a0a5f7fcc480d9f
Author: Jehan <jehan girinstud io>
Date: Tue May 28 00:52:13 2013 +0900
Bug 701090: allowing to reorder shell tabs by drag'n drop in single-window-mode.
app/actions/windows-actions.c | 16 ++++++++++++++++
app/display/gimpimagewindow.c | 24 ++++++++++++++++++++++++
app/menus/windows-menu.c | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 76 insertions(+), 0 deletions(-)
---
diff --git a/app/actions/windows-actions.c b/app/actions/windows-actions.c
index 04ecbe4..c486cac 100644
--- a/app/actions/windows-actions.c
+++ b/app/actions/windows-actions.c
@@ -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;
@@ -255,6 +262,15 @@ windows_actions_display_remove (GimpContainer *container,
}
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,
GimpActionGroup *group)
diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c
index ffec137..a171010 100644
--- a/app/display/gimpimagewindow.c
+++ b/app/display/gimpimagewindow.c
@@ -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));
}
@@ -1719,6 +1729,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)
{
GimpImageWindowPrivate *private = GIMP_IMAGE_WINDOW_GET_PRIVATE (window);
diff --git a/app/menus/windows-menu.c b/app/menus/windows-menu.c
index d0e587e..ba1157d 100644
--- a/app/menus/windows-menu.c
+++ b/app/menus/windows-menu.c
@@ -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;
@@ -179,6 +186,35 @@ windows_menu_display_remove (GimpContainer *container,
}
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,
GimpUIManager *manager)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]