mirror of https://github.com/GNOME/gimp.git
app: Add gimp_dock_columns_new() and GimpContext property
Add and use gimp_dock_columns_new() and add a GimpContext property to GimpDockColumns. Also move the widget construction from _init() to _constructor() in GimpDockWindow so we have a context object to pass to gimp_dock_columns_new().
This commit is contained in:
parent
33573b466b
commit
bc5da21ba2
|
@ -310,7 +310,8 @@ gimp_image_window_constructor (GType type,
|
|||
gtk_widget_show (private->left_hpane);
|
||||
|
||||
/* Create the left dock columns widget */
|
||||
private->left_docks = g_object_new (GIMP_TYPE_DOCK_COLUMNS, NULL);
|
||||
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));
|
||||
gtk_paned_pack1 (GTK_PANED (private->left_hpane), private->left_docks,
|
||||
|
@ -339,9 +340,8 @@ gimp_image_window_constructor (GType type,
|
|||
gtk_widget_show (private->notebook);
|
||||
|
||||
/* Create the right dock columns widget */
|
||||
private->right_docks = g_object_new (GIMP_TYPE_DOCK_COLUMNS, NULL);
|
||||
gimp_dock_columns_set_context (GIMP_DOCK_COLUMNS (private->right_docks),
|
||||
gimp_get_user_context (private->gimp));
|
||||
private->right_docks =
|
||||
gimp_dock_columns_new (gimp_get_user_context (private->gimp));
|
||||
gtk_paned_pack2 (GTK_PANED (private->right_hpane), private->right_docks,
|
||||
FALSE, FALSE);
|
||||
if (config->single_window_mode)
|
||||
|
|
|
@ -43,6 +43,13 @@
|
|||
|
||||
#include "gimp-log.h"
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_CONTEXT
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
DOCK_ADDED,
|
||||
|
@ -61,16 +68,24 @@ struct _GimpDockColumnsPrivate
|
|||
};
|
||||
|
||||
|
||||
static gboolean gimp_dock_columns_dropped_cb (GtkWidget *source,
|
||||
gint insert_index,
|
||||
gpointer data);
|
||||
static void gimp_dock_columns_real_dock_added (GimpDockColumns *dock_columns,
|
||||
GimpDock *dock);
|
||||
static void gimp_dock_columns_real_dock_removed (GimpDockColumns *dock_columns,
|
||||
GimpDock *dock);
|
||||
static void gimp_dock_columns_dock_book_removed (GimpDockColumns *dock_columns,
|
||||
GimpDockbook *dockbook,
|
||||
GimpDock *dock);
|
||||
static void gimp_dock_columns_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_dock_columns_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static gboolean gimp_dock_columns_dropped_cb (GtkWidget *source,
|
||||
gint insert_index,
|
||||
gpointer data);
|
||||
static void gimp_dock_columns_real_dock_added (GimpDockColumns *dock_columns,
|
||||
GimpDock *dock);
|
||||
static void gimp_dock_columns_real_dock_removed (GimpDockColumns *dock_columns,
|
||||
GimpDock *dock);
|
||||
static void gimp_dock_columns_dock_book_removed (GimpDockColumns *dock_columns,
|
||||
GimpDockbook *dockbook,
|
||||
GimpDock *dock);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpDockColumns, gimp_dock_columns, GTK_TYPE_HBOX)
|
||||
|
@ -83,9 +98,21 @@ static guint dock_columns_signals[LAST_SIGNAL] = { 0 };
|
|||
static void
|
||||
gimp_dock_columns_class_init (GimpDockColumnsClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->set_property = gimp_dock_columns_set_property;
|
||||
object_class->get_property = gimp_dock_columns_get_property;
|
||||
|
||||
klass->dock_added = gimp_dock_columns_real_dock_added;
|
||||
klass->dock_removed = gimp_dock_columns_real_dock_removed;
|
||||
|
||||
g_object_class_install_property (object_class, PROP_CONTEXT,
|
||||
g_param_spec_object ("context",
|
||||
NULL, NULL,
|
||||
GIMP_TYPE_CONTEXT,
|
||||
GIMP_PARAM_WRITABLE |
|
||||
G_PARAM_CONSTRUCT_ONLY));
|
||||
|
||||
dock_columns_signals[DOCK_ADDED] =
|
||||
g_signal_new ("dock-added",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
|
@ -125,6 +152,46 @@ gimp_dock_columns_init (GimpDockColumns *dock_columns)
|
|||
gtk_widget_show (dock_columns->p->paned_hbox);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dock_columns_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GimpDockColumns *dock_columns = GIMP_DOCK_COLUMNS (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case PROP_CONTEXT:
|
||||
dock_columns->p->context = g_value_get_object (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dock_columns_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
GimpDockColumns *dock_columns = GIMP_DOCK_COLUMNS (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case PROP_CONTEXT:
|
||||
g_value_set_object (value, dock_columns->p->context);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_dock_columns_dropped_cb (GtkWidget *source,
|
||||
gint insert_index,
|
||||
|
@ -185,6 +252,22 @@ gimp_dock_columns_dock_book_removed (GimpDockColumns *dock_columns,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* gimp_dock_columns_new:
|
||||
* @context:
|
||||
*
|
||||
* Returns: A new #GimpDockColumns.
|
||||
**/
|
||||
GtkWidget *
|
||||
gimp_dock_columns_new (GimpContext *context)
|
||||
{
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
|
||||
|
||||
return g_object_new (GIMP_TYPE_DOCK_COLUMNS,
|
||||
"context", context,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_dock_columns_add_dock:
|
||||
* @dock_columns:
|
||||
|
|
|
@ -58,6 +58,7 @@ 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);
|
||||
|
|
|
@ -246,6 +246,73 @@ gimp_dock_window_init (GimpDockWindow *dock_window)
|
|||
/* Misc */
|
||||
gtk_window_set_resizable (GTK_WINDOW (dock_window), TRUE);
|
||||
gtk_window_set_focus_on_map (GTK_WINDOW (dock_window), FALSE);
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gimp_dock_window_constructor (GType type,
|
||||
guint n_params,
|
||||
GObjectConstructParam *params)
|
||||
{
|
||||
GObject *object = NULL;
|
||||
GimpDockWindow *dock_window = NULL;
|
||||
GimpGuiConfig *config = NULL;
|
||||
GtkAccelGroup *accel_group = NULL;
|
||||
Gimp *gimp = NULL;
|
||||
GtkSettings *settings = NULL;
|
||||
gint menu_view_width = -1;
|
||||
gint menu_view_height = -1;
|
||||
|
||||
/* Init */
|
||||
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
|
||||
dock_window = GIMP_DOCK_WINDOW (object);
|
||||
gimp = GIMP (dock_window->p->context->gimp);
|
||||
config = GIMP_GUI_CONFIG (gimp->config);
|
||||
|
||||
/* Create a separate context per dock so that docks can be bound to
|
||||
* a specific image and does not necessarily have to follow the
|
||||
* active image in the user context
|
||||
*/
|
||||
g_object_unref (dock_window->p->context);
|
||||
dock_window->p->context = gimp_context_new (gimp, "Dock Context", NULL);
|
||||
dock_window->p->image_container = gimp->images;
|
||||
dock_window->p->display_container = gimp->displays;
|
||||
|
||||
/* Setup hints */
|
||||
gimp_window_set_hint (GTK_WINDOW (dock_window), config->dock_window_hint);
|
||||
|
||||
/* Make image window related keyboard shortcuts work also when a
|
||||
* dock window is the focused window
|
||||
*/
|
||||
dock_window->p->ui_manager =
|
||||
gimp_menu_factory_manager_new (global_menu_factory,
|
||||
dock_window->p->ui_manager_name,
|
||||
dock_window,
|
||||
config->tearoff_menus);
|
||||
accel_group =
|
||||
gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (dock_window->p->ui_manager));
|
||||
gtk_window_add_accel_group (GTK_WINDOW (dock_window), accel_group);
|
||||
|
||||
g_signal_connect_object (dock_window->p->context, "display-changed",
|
||||
G_CALLBACK (gimp_dock_window_display_changed),
|
||||
dock_window,
|
||||
G_CONNECT_SWAPPED);
|
||||
g_signal_connect_object (dock_window->p->context, "image-changed",
|
||||
G_CALLBACK (gimp_dock_window_image_changed),
|
||||
dock_window,
|
||||
G_CONNECT_SWAPPED);
|
||||
|
||||
dock_window->p->image_flush_handler_id =
|
||||
gimp_container_add_handler (gimp->images, "flush",
|
||||
G_CALLBACK (gimp_dock_window_image_flush),
|
||||
dock_window);
|
||||
|
||||
gimp_context_define_properties (dock_window->p->context,
|
||||
GIMP_CONTEXT_ALL_PROPS_MASK &
|
||||
~(GIMP_CONTEXT_IMAGE_MASK |
|
||||
GIMP_CONTEXT_DISPLAY_MASK),
|
||||
FALSE);
|
||||
gimp_context_set_parent (dock_window->p->context,
|
||||
gimp_dialog_factory_get_context (dock_window->p->dialog_factory));
|
||||
|
||||
/* Setup widget hierarchy */
|
||||
{
|
||||
|
@ -294,7 +361,12 @@ gimp_dock_window_init (GimpDockWindow *dock_window)
|
|||
}
|
||||
|
||||
/* GimpDockColumns */
|
||||
dock_window->p->dock_columns =g_object_new (GIMP_TYPE_DOCK_COLUMNS, NULL);
|
||||
/* Let the GimpDockColumns mirror the context so that a GimpDock can
|
||||
* get it when inside a dock window. We do the same thing in the
|
||||
* 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));
|
||||
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));
|
||||
|
@ -303,92 +375,6 @@ gimp_dock_window_init (GimpDockWindow *dock_window)
|
|||
dock_window,
|
||||
G_CONNECT_SWAPPED);
|
||||
}
|
||||
}
|
||||
|
||||
static GObject *
|
||||
gimp_dock_window_constructor (GType type,
|
||||
guint n_params,
|
||||
GObjectConstructParam *params)
|
||||
{
|
||||
GObject *object = NULL;
|
||||
GimpDockWindow *dock_window = NULL;
|
||||
GimpGuiConfig *config = NULL;
|
||||
GtkAccelGroup *accel_group = NULL;
|
||||
Gimp *gimp = NULL;
|
||||
GtkSettings *settings = NULL;
|
||||
gint menu_view_width = -1;
|
||||
gint menu_view_height = -1;
|
||||
|
||||
/* Init */
|
||||
object = G_OBJECT_CLASS (parent_class)->constructor (type, n_params, params);
|
||||
dock_window = GIMP_DOCK_WINDOW (object);
|
||||
gimp = GIMP (dock_window->p->context->gimp);
|
||||
config = GIMP_GUI_CONFIG (gimp->config);
|
||||
|
||||
/* Create a separate context per dock so that docks can be bound to
|
||||
* a specific image and does not necessarily have to follow the
|
||||
* active image in the user context
|
||||
*/
|
||||
g_object_unref (dock_window->p->context);
|
||||
dock_window->p->context = gimp_context_new (gimp, "Dock Context", NULL);
|
||||
dock_window->p->image_container = gimp->images;
|
||||
dock_window->p->display_container = gimp->displays;
|
||||
|
||||
/* Let the GimpDockColumns mirror the context so that a GimpDock can
|
||||
* get it when inside a dock window. We do the same thing in the
|
||||
* GimpImageWindow so docks can get the GimpContext there as well
|
||||
*/
|
||||
gimp_dock_columns_set_context (dock_window->p->dock_columns,
|
||||
dock_window->p->context);
|
||||
|
||||
/* Setup hints */
|
||||
gimp_window_set_hint (GTK_WINDOW (dock_window), config->dock_window_hint);
|
||||
|
||||
/* Make image window related keyboard shortcuts work also when a
|
||||
* dock window is the focused window
|
||||
*/
|
||||
dock_window->p->ui_manager =
|
||||
gimp_menu_factory_manager_new (global_menu_factory,
|
||||
dock_window->p->ui_manager_name,
|
||||
dock_window,
|
||||
config->tearoff_menus);
|
||||
accel_group =
|
||||
gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (dock_window->p->ui_manager));
|
||||
gtk_window_add_accel_group (GTK_WINDOW (dock_window), accel_group);
|
||||
|
||||
g_signal_connect_object (dock_window->p->context, "display-changed",
|
||||
G_CALLBACK (gimp_dock_window_display_changed),
|
||||
dock_window,
|
||||
G_CONNECT_SWAPPED);
|
||||
g_signal_connect_object (dock_window->p->context, "image-changed",
|
||||
G_CALLBACK (gimp_dock_window_image_changed),
|
||||
dock_window,
|
||||
G_CONNECT_SWAPPED);
|
||||
|
||||
dock_window->p->image_flush_handler_id =
|
||||
gimp_container_add_handler (gimp->images, "flush",
|
||||
G_CALLBACK (gimp_dock_window_image_flush),
|
||||
dock_window);
|
||||
|
||||
gimp_context_define_properties (dock_window->p->context,
|
||||
GIMP_CONTEXT_ALL_PROPS_MASK &
|
||||
~(GIMP_CONTEXT_IMAGE_MASK |
|
||||
GIMP_CONTEXT_DISPLAY_MASK),
|
||||
FALSE);
|
||||
gimp_context_set_parent (dock_window->p->context,
|
||||
gimp_dialog_factory_get_context (dock_window->p->dialog_factory));
|
||||
|
||||
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),
|
||||
|
@ -413,6 +399,18 @@ gimp_dock_window_constructor (GType type,
|
|||
gimp_help_connect (GTK_WIDGET (dock_window), gimp_standard_help_func,
|
||||
GIMP_HELP_DOCK, NULL);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/* Done! */
|
||||
return object;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue