app: Add "dialog-factory", "ui-manager" properties to GimpDockColumns

Add "dialog-factory", "ui-manager" properties to GimpDockColumns and
let GimpDock look for these before trying to look for a dock window
which does not exist in single-window mode.
This commit is contained in:
Martin Nordholts 2010-01-07 19:18:03 +01:00
parent bc5da21ba2
commit 5d79f664d3
5 changed files with 133 additions and 30 deletions

View File

@ -311,9 +311,9 @@ gimp_image_window_constructor (GType type,
/* Create the left dock columns widget */
private->left_docks =
gimp_dock_columns_new (gimp_get_user_context (private->gimp));
gimp_dock_columns_set_context (GIMP_DOCK_COLUMNS (private->left_docks),
gimp_get_user_context (private->gimp));
gimp_dock_columns_new (gimp_get_user_context (private->gimp),
private->dock_factory,
private->menubar_manager);
gtk_paned_pack1 (GTK_PANED (private->left_hpane), private->left_docks,
FALSE, FALSE);
if (config->single_window_mode)
@ -341,7 +341,9 @@ gimp_image_window_constructor (GType type,
/* Create the right dock columns widget */
private->right_docks =
gimp_dock_columns_new (gimp_get_user_context (private->gimp));
gimp_dock_columns_new (gimp_get_user_context (private->gimp),
private->dock_factory,
private->menubar_manager);
gtk_paned_pack2 (GTK_PANED (private->right_hpane), private->right_docks,
FALSE, FALSE);
if (config->single_window_mode)

View File

@ -405,7 +405,7 @@ gimp_dock_update_with_context (GimpDock *dock,
GimpContext *
gimp_dock_get_context (GimpDock *dock)
{
GimpContext *context = NULL;
GimpContext *context = NULL;
g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
@ -427,7 +427,7 @@ gimp_dock_get_context (GimpDock *dock)
context = gimp_dock_window_get_context (dock_window);
}
return context;
return context;
}
/**
@ -440,13 +440,29 @@ gimp_dock_get_context (GimpDock *dock)
GimpDialogFactory *
gimp_dock_get_dialog_factory (GimpDock *dock)
{
GimpDockWindow *dock_window = NULL;
GimpDialogFactory *dialog_factory = NULL;
g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
dock_window = gimp_dock_window_from_dock (dock);
/* First try GimpDockColumns */
if (! dialog_factory)
{
GimpDockColumns *dock_columns = gimp_dock_get_dock_columns (dock);
return gimp_dock_window_get_dialog_factory (dock_window);
if (dock_columns)
dialog_factory = gimp_dock_columns_get_dialog_factory (dock_columns);
}
/* Then GimpDockWindow */
if (! dialog_factory)
{
GimpDockWindow *dock_window = gimp_dock_window_from_dock (dock);
if (dock_window)
dialog_factory = gimp_dock_window_get_dialog_factory (dock_window);
}
return dialog_factory;
}
/**
@ -459,13 +475,29 @@ gimp_dock_get_dialog_factory (GimpDock *dock)
GimpUIManager *
gimp_dock_get_ui_manager (GimpDock *dock)
{
GimpDockWindow *dock_window = NULL;
GimpUIManager *ui_manager = NULL;
g_return_val_if_fail (GIMP_IS_DOCK (dock), NULL);
dock_window = gimp_dock_window_from_dock (dock);
/* First try GimpDockColumns */
if (! ui_manager)
{
GimpDockColumns *dock_columns = gimp_dock_get_dock_columns (dock);
return gimp_dock_window_get_ui_manager (dock_window);
if (dock_columns)
ui_manager = gimp_dock_columns_get_ui_manager (dock_columns);
}
/* Then GimpDockWindow */
if (! ui_manager)
{
GimpDockWindow *dock_window = gimp_dock_window_from_dock (dock);
if (dock_window)
ui_manager = gimp_dock_window_get_ui_manager (dock_window);
}
return ui_manager;
}
GList *

View File

@ -40,6 +40,7 @@
#include "gimpmenudock.h"
#include "gimppanedbox.h"
#include "gimptoolbox.h"
#include "gimpuimanager.h"
#include "gimp-log.h"
@ -47,7 +48,9 @@
enum
{
PROP_0,
PROP_CONTEXT
PROP_CONTEXT,
PROP_DIALOG_FACTORY,
PROP_UI_MANAGER
};
enum
@ -60,11 +63,13 @@ enum
struct _GimpDockColumnsPrivate
{
GimpContext *context;
GimpContext *context;
GimpDialogFactory *dialog_factory;
GimpUIManager *ui_manager;
GList *docks;
GList *docks;
GtkWidget *paned_hbox;
GtkWidget *paned_hbox;
};
@ -112,6 +117,18 @@ gimp_dock_columns_class_init (GimpDockColumnsClass *klass)
GIMP_TYPE_CONTEXT,
GIMP_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_DIALOG_FACTORY,
g_param_spec_object ("dialog-factory",
NULL, NULL,
GIMP_TYPE_DIALOG_FACTORY,
GIMP_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class, PROP_UI_MANAGER,
g_param_spec_object ("ui-manager",
NULL, NULL,
GIMP_TYPE_UI_MANAGER,
GIMP_PARAM_WRITABLE |
G_PARAM_CONSTRUCT_ONLY));
dock_columns_signals[DOCK_ADDED] =
g_signal_new ("dock-added",
@ -165,6 +182,12 @@ gimp_dock_columns_set_property (GObject *object,
case PROP_CONTEXT:
dock_columns->p->context = g_value_get_object (value);
break;
case PROP_DIALOG_FACTORY:
dock_columns->p->dialog_factory = g_value_get_object (value);
break;
case PROP_UI_MANAGER:
dock_columns->p->ui_manager = g_value_get_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -185,6 +208,12 @@ gimp_dock_columns_get_property (GObject *object,
case PROP_CONTEXT:
g_value_set_object (value, dock_columns->p->context);
break;
case PROP_DIALOG_FACTORY:
g_value_set_object (value, dock_columns->p->dialog_factory);
break;
case PROP_UI_MANAGER:
g_value_set_object (value, dock_columns->p->ui_manager);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -259,12 +288,18 @@ gimp_dock_columns_dock_book_removed (GimpDockColumns *dock_columns,
* Returns: A new #GimpDockColumns.
**/
GtkWidget *
gimp_dock_columns_new (GimpContext *context)
gimp_dock_columns_new (GimpContext *context,
GimpDialogFactory *dialog_factory,
GimpUIManager *ui_manager)
{
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (dialog_factory), NULL);
g_return_val_if_fail (GIMP_IS_UI_MANAGER (ui_manager), NULL);
return g_object_new (GIMP_TYPE_DOCK_COLUMNS,
"context", context,
"context", context,
"dialog-factory", dialog_factory,
"ui-manager", ui_manager,
NULL);
}
@ -351,3 +386,19 @@ gimp_dock_columns_set_context (GimpDockColumns *dock_columns,
dock_columns->p->context = context;
}
GimpDialogFactory *
gimp_dock_columns_get_dialog_factory (GimpDockColumns *dock_columns)
{
g_return_val_if_fail (GIMP_IS_DOCK_COLUMNS (dock_columns), NULL);
return dock_columns->p->dialog_factory;
}
GimpUIManager *
gimp_dock_columns_get_ui_manager (GimpDockColumns *dock_columns)
{
g_return_val_if_fail (GIMP_IS_DOCK_COLUMNS (dock_columns), NULL);
return dock_columns->p->ui_manager;
}

View File

@ -57,17 +57,21 @@ struct _GimpDockColumnsClass
};
GType gimp_dock_columns_get_type (void) G_GNUC_CONST;
GtkWidget * gimp_dock_columns_new (GimpContext *context);
void gimp_dock_columns_add_dock (GimpDockColumns *dock_columns,
GimpDock *dock,
gint index);
void gimp_dock_columns_remove_dock (GimpDockColumns *dock_columns,
GimpDock *dock);
GList * gimp_dock_columns_get_docks (GimpDockColumns *dock_columns);
GimpContext * gimp_dock_columns_get_context (GimpDockColumns *dock_columns);
void gimp_dock_columns_set_context (GimpDockColumns *dock_columns,
GimpContext *context);
GType gimp_dock_columns_get_type (void) G_GNUC_CONST;
GtkWidget * gimp_dock_columns_new (GimpContext *context,
GimpDialogFactory *dialog_factory,
GimpUIManager *ui_manager);
void gimp_dock_columns_add_dock (GimpDockColumns *dock_columns,
GimpDock *dock,
gint index);
void gimp_dock_columns_remove_dock (GimpDockColumns *dock_columns,
GimpDock *dock);
GList * gimp_dock_columns_get_docks (GimpDockColumns *dock_columns);
GimpContext * gimp_dock_columns_get_context (GimpDockColumns *dock_columns);
void gimp_dock_columns_set_context (GimpDockColumns *dock_columns,
GimpContext *context);
GimpDialogFactory * gimp_dock_columns_get_dialog_factory (GimpDockColumns *dock_columns);
GimpUIManager * gimp_dock_columns_get_ui_manager (GimpDockColumns *dock_columns);
#endif /* __GIMP_DOCK_COLUMNS_H__ */

View File

@ -366,7 +366,9 @@ gimp_dock_window_constructor (GType type,
* GimpImageWindow so docks can get the GimpContext there as well
*/
dock_window->p->dock_columns =
GIMP_DOCK_COLUMNS (gimp_dock_columns_new (dock_window->p->context));
GIMP_DOCK_COLUMNS (gimp_dock_columns_new (dock_window->p->context,
dock_window->p->dialog_factory,
dock_window->p->ui_manager));
gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (dock_window->p->dock_columns),
TRUE, TRUE, 0);
gtk_widget_show (GTK_WIDGET (dock_window->p->dock_columns));
@ -376,6 +378,18 @@ gimp_dock_window_constructor (GType type,
G_CONNECT_SWAPPED);
}
if (dock_window->p->auto_follow_active)
{
if (gimp_context_get_display (gimp_dialog_factory_get_context (dock_window->p->dialog_factory)))
gimp_context_copy_property (gimp_dialog_factory_get_context (dock_window->p->dialog_factory),
dock_window->p->context,
GIMP_CONTEXT_PROP_DISPLAY);
else
gimp_context_copy_property (gimp_dialog_factory_get_context (dock_window->p->dialog_factory),
dock_window->p->context,
GIMP_CONTEXT_PROP_IMAGE);
}
g_signal_connect_object (gimp_dialog_factory_get_context (dock_window->p->dialog_factory), "display-changed",
G_CALLBACK (gimp_dock_window_factory_display_changed),
dock_window,