app: Change GimpDialogFactory signals to "dock-window-added/removed"

Change the GimpDialogFactory signals "dock-added" and "dock-removed"
to "dock-window-added" and "dock-window-removed". Doing this makes
sense for a couple of reasons. First of all, the dialog factory is
built around top-levels. Second of all, the listeners to the signals
(such as the "recently closed docks" construct) work on a
gtk-window-level, not a dock level.

This change is a preparation for when GimpDock will stop being a
GimpDockWindow.
This commit is contained in:
Martin Nordholts 2009-09-26 13:11:42 +02:00
parent 3cd7c5a6cd
commit 62dde84e43
6 changed files with 119 additions and 124 deletions

View File

@ -47,32 +47,30 @@
#include "gimp-intl.h"
static void windows_actions_display_add (GimpContainer *container,
GimpDisplay *display,
GimpActionGroup *group);
static void windows_actions_display_remove (GimpContainer *container,
GimpDisplay *display,
GimpActionGroup *group);
static void windows_actions_image_notify (GimpDisplay *display,
const GParamSpec *unused,
GimpActionGroup *group);
static void windows_actions_dock_added (GimpDialogFactory *factory,
GimpDock *dock,
GimpActionGroup *group);
static void windows_actions_dock_removed (GimpDialogFactory *factory,
GimpDock *dock,
GimpActionGroup *group);
static void windows_actions_dock_notify (GimpDock *dock,
const GParamSpec *pspec,
GimpActionGroup *group);
static void windows_actions_recent_add (GimpContainer *container,
GimpSessionInfo *info,
GimpActionGroup *group);
static void windows_actions_recent_remove (GimpContainer *container,
GimpSessionInfo *info,
GimpActionGroup *group);
static void windows_actions_display_add (GimpContainer *container,
GimpDisplay *display,
GimpActionGroup *group);
static void windows_actions_display_remove (GimpContainer *container,
GimpDisplay *display,
GimpActionGroup *group);
static void windows_actions_image_notify (GimpDisplay *display,
const GParamSpec *unused,
GimpActionGroup *group);
static void windows_actions_dock_window_added (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpActionGroup *group);
static void windows_actions_dock_window_removed (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpActionGroup *group);
static void windows_actions_dock_window_notify (GimpDockWindow *dock,
const GParamSpec *pspec,
GimpActionGroup *group);
static void windows_actions_recent_add (GimpContainer *container,
GimpSessionInfo *info,
GimpActionGroup *group);
static void windows_actions_recent_remove (GimpContainer *container,
GimpSessionInfo *info,
GimpActionGroup *group);
static const GimpActionEntry windows_actions[] =
@ -119,21 +117,21 @@ windows_actions_setup (GimpActionGroup *group)
windows_actions_display_add (group->gimp->displays, display, group);
}
g_signal_connect_object (global_dock_factory, "dock-added",
G_CALLBACK (windows_actions_dock_added),
g_signal_connect_object (global_dock_factory, "dock-window-added",
G_CALLBACK (windows_actions_dock_window_added),
group, 0);
g_signal_connect_object (global_dock_factory, "dock-removed",
G_CALLBACK (windows_actions_dock_removed),
g_signal_connect_object (global_dock_factory, "dock-window-removed",
G_CALLBACK (windows_actions_dock_window_removed),
group, 0);
for (list = global_dock_factory->open_dialogs;
list;
list = g_list_next (list))
{
GimpDock *dock = list->data;
GimpDockWindow *dock_window = list->data;
if (GIMP_IS_DOCK (dock))
windows_actions_dock_added (global_dock_factory, dock, group);
if (GIMP_IS_DOCK_WINDOW (dock_window))
windows_actions_dock_window_added (global_dock_factory, dock_window, group);
}
g_signal_connect_object (global_recent_docks, "add",
@ -160,10 +158,8 @@ windows_actions_update (GimpActionGroup *group,
}
gchar *
windows_actions_dock_to_action_name (GimpDock *dock)
windows_actions_dock_window_to_action_name (GimpDockWindow *dock_window)
{
GimpDockWindow *dock_window = gimp_dock_window_from_dock (dock);
return g_strdup_printf ("windows-dock-%04d",
gimp_dock_window_get_id (dock_window));
}
@ -275,13 +271,13 @@ windows_actions_image_notify (GimpDisplay *display,
}
static void
windows_actions_dock_added (GimpDialogFactory *factory,
GimpDock *dock,
GimpActionGroup *group)
windows_actions_dock_window_added (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpActionGroup *group)
{
GtkAction *action;
GimpActionEntry entry;
gchar *action_name = windows_actions_dock_to_action_name (dock);
gchar *action_name = windows_actions_dock_window_to_action_name (dock_window);
entry.name = action_name;
entry.stock_id = NULL;
@ -300,25 +296,25 @@ windows_actions_dock_added (GimpDialogFactory *factory,
"ellipsize", PANGO_ELLIPSIZE_END,
NULL);
g_object_set_data (G_OBJECT (action), "dock", dock);
g_object_set_data (G_OBJECT (action), "dock-window", dock_window);
g_free (action_name);
g_signal_connect_object (dock, "notify::title",
G_CALLBACK (windows_actions_dock_notify),
g_signal_connect_object (dock_window, "notify::title",
G_CALLBACK (windows_actions_dock_window_notify),
group, 0);
if (gtk_window_get_title (GTK_WINDOW (dock)))
windows_actions_dock_notify (dock, NULL, group);
if (gtk_window_get_title (GTK_WINDOW (dock_window)))
windows_actions_dock_window_notify (dock_window, NULL, group);
}
static void
windows_actions_dock_removed (GimpDialogFactory *factory,
GimpDock *dock,
GimpActionGroup *group)
windows_actions_dock_window_removed (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpActionGroup *group)
{
GtkAction *action;
gchar *action_name = windows_actions_dock_to_action_name (dock);
gchar *action_name = windows_actions_dock_window_to_action_name (dock_window);
action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name);
@ -329,21 +325,21 @@ windows_actions_dock_removed (GimpDialogFactory *factory,
}
static void
windows_actions_dock_notify (GimpDock *dock,
const GParamSpec *pspec,
GimpActionGroup *group)
windows_actions_dock_window_notify (GimpDockWindow *dock_window,
const GParamSpec *pspec,
GimpActionGroup *group)
{
GtkAction *action;
gchar *action_name;
action_name = windows_actions_dock_to_action_name (dock);
action_name = windows_actions_dock_window_to_action_name (dock_window);
action = gtk_action_group_get_action (GTK_ACTION_GROUP (group), action_name);
g_free (action_name);
if (action)
g_object_set (action,
"label", gtk_window_get_title (GTK_WINDOW (dock)),
"tooltip", gtk_window_get_title (GTK_WINDOW (dock)),
"label", gtk_window_get_title (GTK_WINDOW (dock_window)),
"tooltip", gtk_window_get_title (GTK_WINDOW (dock_window)),
NULL);
}

View File

@ -19,10 +19,10 @@
#define __WINDOWS_ACTIONS_H__
void windows_actions_setup (GimpActionGroup *group);
void windows_actions_update (GimpActionGroup *group,
gpointer data);
gchar * windows_actions_dock_to_action_name (GimpDock *dock);
void windows_actions_setup (GimpActionGroup *group);
void windows_actions_update (GimpActionGroup *group,
gpointer data);
gchar * windows_actions_dock_window_to_action_name (GimpDockWindow *dock_window);
#endif /* __WINDOWS_ACTIONS_H__ */

View File

@ -57,9 +57,9 @@ void
windows_show_dock_cmd_callback (GtkAction *action,
gpointer data)
{
GtkWindow *dock = g_object_get_data (G_OBJECT (action), "dock");
GtkWindow *dock_window = g_object_get_data (G_OBJECT (action), "dock-window");
gtk_window_present (dock);
gtk_window_present (dock_window);
}
void

View File

@ -46,34 +46,34 @@
#include "windows-menu.h"
static void windows_menu_display_add (GimpContainer *container,
GimpDisplay *display,
GimpUIManager *manager);
static void windows_menu_display_remove (GimpContainer *container,
GimpDisplay *display,
GimpUIManager *manager);
static void windows_menu_image_notify (GimpDisplay *display,
const GParamSpec *unused,
GimpUIManager *manager);
static void windows_menu_dock_added (GimpDialogFactory *factory,
GimpDock *dock,
GimpUIManager *manager);
static void windows_menu_dock_removed (GimpDialogFactory *factory,
GimpDock *dock,
GimpUIManager *manager);
static gchar * windows_menu_dock_to_merge_id (GimpDock *dock);
static void windows_menu_recent_add (GimpContainer *container,
GimpSessionInfo *info,
GimpUIManager *manager);
static void windows_menu_recent_remove (GimpContainer *container,
GimpSessionInfo *info,
GimpUIManager *manager);
static gboolean windows_menu_display_query_tooltip (GtkWidget *widget,
gint x,
gint y,
gboolean keyboard_mode,
GtkTooltip *tooltip,
GimpAction *action);
static void windows_menu_display_add (GimpContainer *container,
GimpDisplay *display,
GimpUIManager *manager);
static void windows_menu_display_remove (GimpContainer *container,
GimpDisplay *display,
GimpUIManager *manager);
static void windows_menu_image_notify (GimpDisplay *display,
const GParamSpec *unused,
GimpUIManager *manager);
static void windows_menu_dock_window_added (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpUIManager *manager);
static void windows_menu_dock_window_removed (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpUIManager *manager);
static gchar * windows_menu_dock_window_to_merge_id (GimpDockWindow *dock_window);
static void windows_menu_recent_add (GimpContainer *container,
GimpSessionInfo *info,
GimpUIManager *manager);
static void windows_menu_recent_remove (GimpContainer *container,
GimpSessionInfo *info,
GimpUIManager *manager);
static gboolean windows_menu_display_query_tooltip (GtkWidget *widget,
gint x,
gint y,
gboolean keyboard_mode,
GtkTooltip *tooltip,
GimpAction *action);
void
@ -104,21 +104,21 @@ windows_menu_setup (GimpUIManager *manager,
windows_menu_display_add (manager->gimp->displays, display, manager);
}
g_signal_connect_object (global_dock_factory, "dock-added",
G_CALLBACK (windows_menu_dock_added),
g_signal_connect_object (global_dock_factory, "dock-window-added",
G_CALLBACK (windows_menu_dock_window_added),
manager, 0);
g_signal_connect_object (global_dock_factory, "dock-removed",
G_CALLBACK (windows_menu_dock_removed),
g_signal_connect_object (global_dock_factory, "dock-window-removed",
G_CALLBACK (windows_menu_dock_window_removed),
manager, 0);
for (list = global_dock_factory->open_dialogs;
list;
list = g_list_next (list))
{
GimpDock *dock = list->data;
GimpDockWindow *dock_window = list->data;
if (GIMP_IS_DOCK (dock))
windows_menu_dock_added (global_dock_factory, dock, manager);
if (GIMP_IS_DOCK_WINDOW (dock_window))
windows_menu_dock_window_added (global_dock_factory, dock_window, manager);
}
g_signal_connect_object (global_recent_docks, "add",
@ -244,9 +244,9 @@ windows_menu_image_notify (GimpDisplay *display,
}
static void
windows_menu_dock_added (GimpDialogFactory *factory,
GimpDock *dock,
GimpUIManager *manager)
windows_menu_dock_window_added (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpUIManager *manager)
{
const gchar *ui_path;
gchar *action_name;
@ -256,11 +256,11 @@ windows_menu_dock_added (GimpDialogFactory *factory,
ui_path = g_object_get_data (G_OBJECT (manager), "image-menu-ui-path");
action_name = windows_actions_dock_to_action_name (dock);
action_name = windows_actions_dock_window_to_action_name (dock_window);
action_path = g_strdup_printf ("%s/Windows/Docks",
ui_path);
merge_key = windows_menu_dock_to_merge_id (dock);
merge_key = windows_menu_dock_window_to_merge_id (dock_window);
merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (manager));
g_object_set_data (G_OBJECT (manager), merge_key,
@ -277,11 +277,11 @@ windows_menu_dock_added (GimpDialogFactory *factory,
}
static void
windows_menu_dock_removed (GimpDialogFactory *factory,
GimpDock *dock,
GimpUIManager *manager)
windows_menu_dock_window_removed (GimpDialogFactory *factory,
GimpDockWindow *dock_window,
GimpUIManager *manager)
{
gchar *merge_key = windows_menu_dock_to_merge_id (dock);
gchar *merge_key = windows_menu_dock_window_to_merge_id (dock_window);
guint merge_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (manager),
merge_key));
if (merge_id)
@ -293,10 +293,8 @@ windows_menu_dock_removed (GimpDialogFactory *factory,
}
static gchar *
windows_menu_dock_to_merge_id (GimpDock *dock)
windows_menu_dock_window_to_merge_id (GimpDockWindow *dock_window)
{
GimpDockWindow *dock_window = gimp_dock_window_from_dock (dock);
return g_strdup_printf ("windows-dock-%04d-merge-id",
gimp_dock_window_get_id (dock_window));
}

View File

@ -38,6 +38,7 @@
#include "gimpdock.h"
#include "gimpdockbook.h"
#include "gimpdockable.h"
#include "gimpdockwindow.h"
#include "gimpmenufactory.h"
#include "gimpsessioninfo.h"
@ -53,8 +54,8 @@ typedef enum
enum
{
DOCK_ADDED,
DOCK_REMOVED,
DOCK_WINDOW_ADDED,
DOCK_WINDOW_REMOVED,
LAST_SIGNAL
};
@ -122,25 +123,25 @@ gimp_dialog_factory_class_init (GimpDialogFactoryClass *klass)
klass->factories = g_hash_table_new (g_str_hash, g_str_equal);
factory_signals[DOCK_ADDED] =
g_signal_new ("dock-added",
factory_signals[DOCK_WINDOW_ADDED] =
g_signal_new ("dock-window-added",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpDialogFactoryClass, dock_added),
G_STRUCT_OFFSET (GimpDialogFactoryClass, dock_window_added),
NULL, NULL,
gimp_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_DOCK);
GIMP_TYPE_DOCK_WINDOW);
factory_signals[DOCK_REMOVED] =
g_signal_new ("dock-removed",
factory_signals[DOCK_WINDOW_REMOVED] =
g_signal_new ("dock-window-removed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpDialogFactoryClass, dock_removed),
G_STRUCT_OFFSET (GimpDialogFactoryClass, dock_window_removed),
NULL, NULL,
gimp_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_DOCK);
GIMP_TYPE_DOCK_WINDOW);
}
static void
@ -940,7 +941,7 @@ gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
factory->session_infos = g_list_append (factory->session_infos, info);
}
g_signal_emit (factory, factory_signals[DOCK_ADDED], 0, dialog);
g_signal_emit (factory, factory_signals[DOCK_WINDOW_ADDED], 0, dialog);
}
factory->open_dialogs = g_list_prepend (factory->open_dialogs, dialog);
@ -1064,7 +1065,7 @@ gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory,
session_info);
g_object_unref (session_info);
g_signal_emit (factory, factory_signals[DOCK_REMOVED], 0,
g_signal_emit (factory, factory_signals[DOCK_WINDOW_REMOVED], 0,
dialog);
}

View File

@ -100,10 +100,10 @@ struct _GimpDialogFactoryClass
GHashTable *factories;
void (* dock_added) (GimpDialogFactory *factory,
GimpDock *dock);
void (* dock_removed) (GimpDialogFactory *factory,
GimpDock *dock);
void (* dock_window_added) (GimpDialogFactory *factory,
GimpDockWindow *dock_window);
void (* dock_window_removed) (GimpDialogFactory *factory,
GimpDockWindow *dock_window);
};