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:
Martin Nordholts 2009-09-13 12:04:50 +02:00
parent dc3521e074
commit 0d4e8d0526
2 changed files with 80 additions and 57 deletions

View File

@ -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)

View File

@ -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,