mirror of https://github.com/GNOME/gimp.git
app: Move 'Recently Closed Docks' logic to GimpDockWindow
Move 'Recently Closed Docks' logic from GimpDock to GimpDockWindow. GimpDock is now free of explicit GtkWindow dependencies.
This commit is contained in:
parent
dc3521e074
commit
0d4e8d0526
|
@ -36,10 +36,6 @@
|
|||
#include "gimpdockbook.h"
|
||||
#include "gimpdockseparator.h"
|
||||
|
||||
#include "gimpsessioninfo.h" /* FIXME */
|
||||
#include "core/gimpcontainer.h" /* FIXME */
|
||||
#include "dialogs/dialogs.h" /* FIXME */
|
||||
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
|
@ -81,9 +77,6 @@ static void gimp_dock_get_property (GObject *object,
|
|||
|
||||
static void gimp_dock_destroy (GtkObject *object);
|
||||
|
||||
static gboolean gimp_dock_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event);
|
||||
|
||||
static void gimp_dock_real_book_added (GimpDock *dock,
|
||||
GimpDockbook *dockbook);
|
||||
static void gimp_dock_real_book_removed (GimpDock *dock,
|
||||
|
@ -102,7 +95,6 @@ gimp_dock_class_init (GimpDockClass *klass)
|
|||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
dock_signals[BOOK_ADDED] =
|
||||
g_signal_new ("book-added",
|
||||
|
@ -129,8 +121,6 @@ gimp_dock_class_init (GimpDockClass *klass)
|
|||
|
||||
gtk_object_class->destroy = gimp_dock_destroy;
|
||||
|
||||
widget_class->delete_event = gimp_dock_delete_event;
|
||||
|
||||
klass->setup = NULL;
|
||||
klass->book_added = gimp_dock_real_book_added;
|
||||
klass->book_removed = gimp_dock_real_book_removed;
|
||||
|
@ -241,30 +231,6 @@ gimp_dock_destroy (GtkObject *object)
|
|||
GTK_OBJECT_CLASS (parent_class)->destroy (object);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_dock_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event)
|
||||
{
|
||||
GimpDock *dock = GIMP_DOCK (widget);
|
||||
|
||||
if (gimp_dock_get_n_dockables (dock) > 1)
|
||||
{
|
||||
GimpSessionInfo *info = gimp_session_info_new ();
|
||||
|
||||
gimp_object_set_name (GIMP_OBJECT (info),
|
||||
gtk_window_get_title (GTK_WINDOW (widget)));
|
||||
|
||||
info->widget = widget;
|
||||
gimp_session_info_get_info (info);
|
||||
info->widget = NULL;
|
||||
|
||||
gimp_container_add (global_recent_docks, GIMP_OBJECT (info));
|
||||
g_object_unref (info);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dock_real_book_added (GimpDock *dock,
|
||||
GimpDockbook *dockbook)
|
||||
|
|
|
@ -27,15 +27,21 @@
|
|||
|
||||
#include "widgets-types.h"
|
||||
|
||||
#include "dialogs/dialogs.h" /* FIXME, we are in the widget layer */
|
||||
|
||||
#include "config/gimpguiconfig.h"
|
||||
|
||||
#include "core/gimp.h"
|
||||
#include "core/gimpcontext.h"
|
||||
#include "core/gimpcontainer.h"
|
||||
#include "core/gimpcontainer.h"
|
||||
|
||||
#include "gimpdialogfactory.h"
|
||||
#include "gimpdock.h"
|
||||
#include "gimpdockbook.h"
|
||||
#include "gimpdockwindow.h"
|
||||
#include "gimpmenufactory.h"
|
||||
#include "gimpsessioninfo.h"
|
||||
#include "gimpuimanager.h"
|
||||
#include "gimpwidgets-utils.h"
|
||||
#include "gimpwindow.h"
|
||||
|
@ -69,29 +75,32 @@ struct _GimpDockWindowPrivate
|
|||
gint ID;
|
||||
};
|
||||
|
||||
static GObject * gimp_dock_window_constructor (GType type,
|
||||
guint n_params,
|
||||
GObjectConstructParam *params);
|
||||
static void gimp_dock_window_dispose (GObject *object);
|
||||
static void gimp_dock_window_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_dock_window_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_dock_window_style_set (GtkWidget *widget,
|
||||
GtkStyle *prev_style);
|
||||
static void gimp_dock_window_display_changed (GimpDockWindow *dock_window,
|
||||
GimpObject *display,
|
||||
GimpContext *context);
|
||||
static void gimp_dock_window_image_changed (GimpDockWindow *dock_window,
|
||||
GimpImage *image,
|
||||
GimpContext *context);
|
||||
static void gimp_dock_window_image_flush (GimpImage *image,
|
||||
gboolean invalidate_preview,
|
||||
GimpDockWindow *dock_window);
|
||||
static GObject * gimp_dock_window_constructor (GType type,
|
||||
guint n_params,
|
||||
GObjectConstructParam *params);
|
||||
static void gimp_dock_window_dispose (GObject *object);
|
||||
static void gimp_dock_window_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_dock_window_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec);
|
||||
static void gimp_dock_window_style_set (GtkWidget *widget,
|
||||
GtkStyle *prev_style);
|
||||
static gboolean gimp_dock_window_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event);
|
||||
static GimpDock * gimp_dock_window_get_dock (GimpDockWindow *dock_window);
|
||||
static void gimp_dock_window_display_changed (GimpDockWindow *dock_window,
|
||||
GimpObject *display,
|
||||
GimpContext *context);
|
||||
static void gimp_dock_window_image_changed (GimpDockWindow *dock_window,
|
||||
GimpImage *image,
|
||||
GimpContext *context);
|
||||
static void gimp_dock_window_image_flush (GimpImage *image,
|
||||
gboolean invalidate_preview,
|
||||
GimpDockWindow *dock_window);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpDockWindow, gimp_dock_window, GIMP_TYPE_WINDOW)
|
||||
|
@ -110,6 +119,7 @@ gimp_dock_window_class_init (GimpDockWindowClass *klass)
|
|||
object_class->get_property = gimp_dock_window_get_property;
|
||||
|
||||
widget_class->style_set = gimp_dock_window_style_set;
|
||||
widget_class->delete_event = gimp_dock_window_delete_event;
|
||||
|
||||
g_object_class_install_property (object_class, PROP_CONTEXT,
|
||||
g_param_spec_object ("gimp-context", NULL, NULL,
|
||||
|
@ -368,6 +378,53 @@ gimp_dock_window_style_set (GtkWidget *widget,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gimp_dock_window_delete_event:
|
||||
* @widget:
|
||||
* @event:
|
||||
*
|
||||
* Makes sure that when dock windows are closed they are added to the
|
||||
* list of recently closed docks so that they are easy to bring back.
|
||||
**/
|
||||
static gboolean
|
||||
gimp_dock_window_delete_event (GtkWidget *widget,
|
||||
GdkEventAny *event)
|
||||
{
|
||||
GimpDockWindow *dock_window = GIMP_DOCK_WINDOW (widget);
|
||||
GimpDock *dock = gimp_dock_window_get_dock (dock_window);
|
||||
GimpSessionInfo *info = NULL;
|
||||
|
||||
/* Don't add docks with just a singe dockable to the list of
|
||||
* recently closed dock since those can be brought back through the
|
||||
* normal Windows->Dockable Dialogs menu
|
||||
*/
|
||||
if (gimp_dock_get_n_dockables (dock) < 2)
|
||||
return FALSE;
|
||||
|
||||
info = gimp_session_info_new ();
|
||||
|
||||
gimp_object_set_name (GIMP_OBJECT (info),
|
||||
gtk_window_get_title (GTK_WINDOW (dock_window)));
|
||||
|
||||
info->widget = GTK_WIDGET (dock);
|
||||
gimp_session_info_get_info (info);
|
||||
info->widget = NULL;
|
||||
|
||||
gimp_container_add (global_recent_docks, GIMP_OBJECT (info));
|
||||
g_object_unref (info);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static GimpDock *
|
||||
gimp_dock_window_get_dock (GimpDockWindow *dock_window)
|
||||
{
|
||||
/* Change this to return the GimpDock *inside* the GimpDockWindow
|
||||
* once GimpDock is not a subclass of GimpDockWindow any longer
|
||||
*/
|
||||
return GIMP_DOCK (dock_window);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_dock_window_display_changed (GimpDockWindow *dock_window,
|
||||
GimpObject *display,
|
||||
|
|
Loading…
Reference in New Issue