gimp r25177 - in trunk: . app/dialogs app/display app/gui
- From: mitch svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r25177 - in trunk: . app/dialogs app/display app/gui
- Date: Sun, 23 Mar 2008 13:40:39 +0000 (GMT)
Author: mitch
Date: Sun Mar 23 13:40:39 2008
New Revision: 25177
URL: http://svn.gnome.org/viewvc/gimp?rev=25177&view=rev
Log:
2008-03-23 Michael Natterer <mitch gimp org>
* app/dialogs/dialogs.[ch]: added a dialog factory for displays
and register "gimp-no-image-window" with it.
* app/display/gimpdisplay.[ch]: add a GimpDialogFactory parameter
to gimp_display_new() and pass it on to gimp_display_shell_new().
* app/display/gimpdisplayshell.[ch]: keep the passed
GimpDialogFactory around. When the shell becomes empty, add it to
the dialog factory and resize it to the remembered size; when it
becomes non-empty, remove it from the dialog factory again.
* app/gui/gui-vtable.c: pass the display dialog factory to
gimp_display_new().
Modified:
trunk/ChangeLog
trunk/app/dialogs/dialogs.c
trunk/app/dialogs/dialogs.h
trunk/app/display/gimpdisplay.c
trunk/app/display/gimpdisplay.h
trunk/app/display/gimpdisplayshell.c
trunk/app/display/gimpdisplayshell.h
trunk/app/gui/gui-vtable.c
Modified: trunk/app/dialogs/dialogs.c
==============================================================================
--- trunk/app/dialogs/dialogs.c (original)
+++ trunk/app/dialogs/dialogs.c Sun Mar 23 13:40:39 2008
@@ -40,6 +40,7 @@
GimpDialogFactory *global_dialog_factory = NULL;
GimpDialogFactory *global_dock_factory = NULL;
GimpDialogFactory *global_toolbox_factory = NULL;
+GimpDialogFactory *global_display_factory = NULL;
#define FOREIGN(id,singleton,remember_size) \
@@ -257,6 +258,11 @@
gimp_dialog_factory_set_constructor (global_dock_factory,
dialogs_dockable_constructor);
+ global_display_factory = gimp_dialog_factory_new ("display",
+ gimp_get_user_context (gimp),
+ menu_factory,
+ NULL);
+
for (i = 0; i < G_N_ELEMENTS (toplevel_entries); i++)
gimp_dialog_factory_register_entry (global_dialog_factory,
toplevel_entries[i].identifier,
@@ -284,6 +290,17 @@
dock_entries[i].session_managed,
dock_entries[i].remember_size,
dock_entries[i].remember_if_open);
+
+ gimp_dialog_factory_register_entry (global_display_factory,
+ "gimp-no-image-window",
+ NULL, NULL,
+ NULL, NULL,
+ NULL,
+ -1,
+ TRUE,
+ TRUE,
+ TRUE,
+ FALSE);
}
void
@@ -314,6 +331,12 @@
g_object_unref (global_dock_factory);
global_dock_factory = NULL;
}
+
+ if (global_display_factory)
+ {
+ g_object_unref (global_display_factory);
+ global_display_factory = NULL;
+ }
}
GtkWidget *
Modified: trunk/app/dialogs/dialogs.h
==============================================================================
--- trunk/app/dialogs/dialogs.h (original)
+++ trunk/app/dialogs/dialogs.h Sun Mar 23 13:40:39 2008
@@ -23,6 +23,7 @@
extern GimpDialogFactory *global_dialog_factory;
extern GimpDialogFactory *global_dock_factory;
extern GimpDialogFactory *global_toolbox_factory;
+extern GimpDialogFactory *global_display_factory;
void dialogs_init (Gimp *gimp,
Modified: trunk/app/display/gimpdisplay.c
==============================================================================
--- trunk/app/display/gimpdisplay.c (original)
+++ trunk/app/display/gimpdisplay.c Sun Mar 23 13:40:39 2008
@@ -343,12 +343,13 @@
/* public functions */
GimpDisplay *
-gimp_display_new (Gimp *gimp,
- GimpImage *image,
- GimpUnit unit,
- gdouble scale,
- GimpMenuFactory *menu_factory,
- GimpUIManager *popup_manager)
+gimp_display_new (Gimp *gimp,
+ GimpImage *image,
+ GimpUnit unit,
+ gdouble scale,
+ GimpMenuFactory *menu_factory,
+ GimpUIManager *popup_manager,
+ GimpDialogFactory *display_factory)
{
GimpDisplay *display;
gint ID;
@@ -380,7 +381,8 @@
/* create the shell for the image */
display->shell = gimp_display_shell_new (display, unit, scale,
- menu_factory, popup_manager);
+ menu_factory, popup_manager,
+ display_factory);
gtk_widget_show (display->shell);
g_signal_connect (GIMP_DISPLAY_SHELL (display->shell)->statusbar, "cancel",
Modified: trunk/app/display/gimpdisplay.h
==============================================================================
--- trunk/app/display/gimpdisplay.h (original)
+++ trunk/app/display/gimpdisplay.h Sun Mar 23 13:40:39 2008
@@ -59,36 +59,37 @@
GType gimp_display_get_type (void) G_GNUC_CONST;
-GimpDisplay * gimp_display_new (Gimp *gimp,
- GimpImage *image,
- GimpUnit unit,
- gdouble scale,
- GimpMenuFactory *menu_factory,
- GimpUIManager *popup_manager);
-void gimp_display_delete (GimpDisplay *display);
-
-gint gimp_display_get_ID (GimpDisplay *display);
-GimpDisplay * gimp_display_get_by_ID (Gimp *gimp,
- gint ID);
-
-void gimp_display_set_image (GimpDisplay *display,
- GimpImage *image);
-
-void gimp_display_empty (GimpDisplay *display);
-void gimp_display_fill (GimpDisplay *display,
- GimpImage *image,
- GimpUnit unit,
- gdouble scale);
-
-void gimp_display_update_area (GimpDisplay *display,
- gboolean now,
- gint x,
- gint y,
- gint w,
- gint h);
+GimpDisplay * gimp_display_new (Gimp *gimp,
+ GimpImage *image,
+ GimpUnit unit,
+ gdouble scale,
+ GimpMenuFactory *menu_factory,
+ GimpUIManager *popup_manager,
+ GimpDialogFactory *display_factory);
+void gimp_display_delete (GimpDisplay *display);
+
+gint gimp_display_get_ID (GimpDisplay *display);
+GimpDisplay * gimp_display_get_by_ID (Gimp *gimp,
+ gint ID);
+
+void gimp_display_set_image (GimpDisplay *display,
+ GimpImage *image);
+
+void gimp_display_empty (GimpDisplay *display);
+void gimp_display_fill (GimpDisplay *display,
+ GimpImage *image,
+ GimpUnit unit,
+ gdouble scale);
+
+void gimp_display_update_area (GimpDisplay *display,
+ gboolean now,
+ gint x,
+ gint y,
+ gint w,
+ gint h);
-void gimp_display_flush (GimpDisplay *display);
-void gimp_display_flush_now (GimpDisplay *display);
+void gimp_display_flush (GimpDisplay *display);
+void gimp_display_flush_now (GimpDisplay *display);
#endif /* __GIMP_DISPLAY_H__ */
Modified: trunk/app/display/gimpdisplayshell.c
==============================================================================
--- trunk/app/display/gimpdisplayshell.c (original)
+++ trunk/app/display/gimpdisplayshell.c Sun Mar 23 13:40:39 2008
@@ -47,8 +47,10 @@
#include "core/gimpsamplepoint.h"
#include "core/gimptemplate.h"
+#include "widgets/gimpdialogfactory.h"
#include "widgets/gimphelp-ids.h"
#include "widgets/gimpmenufactory.h"
+#include "widgets/gimpsessioninfo.h"
#include "widgets/gimpuimanager.h"
#include "widgets/gimpwidgets-utils.h"
@@ -114,6 +116,8 @@
static gboolean gimp_display_shell_delete_event (GtkWidget *widget,
GdkEventAny *aevent);
static gboolean gimp_display_shell_popup_menu (GtkWidget *widget);
+static void gimp_display_shell_style_set (GtkWidget *widget,
+ GtkStyle *prev_style);
static void gimp_display_shell_real_scaled (GimpDisplayShell *shell);
@@ -203,6 +207,7 @@
widget_class->screen_changed = gimp_display_shell_screen_changed;
widget_class->delete_event = gimp_display_shell_delete_event;
widget_class->popup_menu = gimp_display_shell_popup_menu;
+ widget_class->style_set = gimp_display_shell_style_set;
klass->scaled = gimp_display_shell_real_scaled;
klass->scrolled = NULL;
@@ -581,6 +586,26 @@
}
static void
+gimp_display_shell_style_set (GtkWidget *widget,
+ GtkStyle *prev_style)
+{
+ GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (widget);
+ GtkRequisition menubar_req;
+ GtkRequisition statusbar_req;
+
+ GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
+
+ gtk_widget_size_request (shell->menubar, &menubar_req);
+ gtk_widget_size_request (shell->statusbar, &statusbar_req);
+
+#if 0
+ /* this doesn't work */
+ gtk_widget_set_size_request (widget, -1,
+ menubar_req.height + statusbar_req.height);
+#endif
+}
+
+static void
gimp_display_shell_real_scaled (GimpDisplayShell *shell)
{
GimpContext *user_context;
@@ -641,11 +666,12 @@
/* public functions */
GtkWidget *
-gimp_display_shell_new (GimpDisplay *display,
- GimpUnit unit,
- gdouble scale,
- GimpMenuFactory *menu_factory,
- GimpUIManager *popup_manager)
+gimp_display_shell_new (GimpDisplay *display,
+ GimpUnit unit,
+ gdouble scale,
+ GimpMenuFactory *menu_factory,
+ GimpUIManager *popup_manager,
+ GimpDialogFactory *display_factory)
{
GimpDisplayShell *shell;
GimpColorDisplayStack *filter;
@@ -666,6 +692,7 @@
g_return_val_if_fail (GIMP_IS_DISPLAY (display), NULL);
g_return_val_if_fail (GIMP_IS_MENU_FACTORY (menu_factory), NULL);
g_return_val_if_fail (GIMP_IS_UI_MANAGER (popup_manager), NULL);
+ g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (display_factory), NULL);
/* the toplevel shell */
shell = g_object_new (GIMP_TYPE_DISPLAY_SHELL,
@@ -674,6 +701,8 @@
shell->display = display;
+ shell->display_factory = display_factory;
+
if (shell->display->image)
{
image_width = gimp_image_get_width (shell->display->image);
@@ -1102,9 +1131,16 @@
}
if (shell->display->image)
- gimp_display_shell_connect (shell);
+ {
+ gimp_display_shell_connect (shell);
+ }
else
- gimp_statusbar_empty (GIMP_STATUSBAR (shell->statusbar));
+ {
+ gimp_statusbar_empty (GIMP_STATUSBAR (shell->statusbar));
+ gimp_dialog_factory_add_foreign (shell->display_factory,
+ "gimp-no-image-window",
+ GTK_WIDGET (shell));
+ }
gimp_display_shell_title_init (shell);
@@ -1142,10 +1178,35 @@
void
gimp_display_shell_empty (GimpDisplayShell *shell)
{
+ GimpSessionInfo *session_info;
+ gint width;
+ gint height;
+
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
g_return_if_fail (GIMP_IS_DISPLAY (shell->display));
g_return_if_fail (shell->display->image == NULL);
+ /* get the NIW size before adding the display to the dialog factory
+ * so the window's current size doesn't affect the stored session
+ * info entry.
+ */
+ session_info = gimp_dialog_factory_find_session_info (shell->display_factory,
+ "gimp-no-image-window");
+ if (session_info)
+ {
+ width = session_info->width;
+ height = session_info->height;
+ }
+ else
+ {
+ width = GTK_WIDGET (shell)->allocation.width;
+ height = GTK_WIDGET (shell)->allocation.height;
+ }
+
+ gimp_dialog_factory_add_foreign (shell->display_factory,
+ "gimp-no-image-window",
+ GTK_WIDGET (shell));
+
if (shell->fill_idle_id)
{
g_source_remove (shell->fill_idle_id);
@@ -1166,6 +1227,8 @@
gimp_display_shell_appearance_update (shell);
gimp_display_shell_expose_full (shell);
+
+ gtk_window_resize (GTK_WINDOW (shell), width, height);
}
static gboolean
@@ -1193,6 +1256,9 @@
g_return_if_fail (GIMP_IS_DISPLAY (shell->display));
g_return_if_fail (GIMP_IS_IMAGE (image));
+ gimp_dialog_factory_remove_dialog (shell->display_factory,
+ GTK_WIDGET (shell));
+
gimp_display_shell_set_unit (shell, unit);
gimp_display_shell_set_initial_scale (shell, scale,
&display_width, &display_height);
Modified: trunk/app/display/gimpdisplayshell.h
==============================================================================
--- trunk/app/display/gimpdisplayshell.h (original)
+++ trunk/app/display/gimpdisplayshell.h Sun Mar 23 13:40:39 2008
@@ -70,6 +70,8 @@
GimpUIManager *menubar_manager;
GimpUIManager *popup_manager;
+ GimpDialogFactory *display_factory;
+
gdouble monitor_xres;
gdouble monitor_yres;
@@ -209,7 +211,8 @@
GimpUnit unit,
gdouble scale,
GimpMenuFactory *menu_factory,
- GimpUIManager *popup_manager);
+ GimpUIManager *popup_manager,
+ GimpDialogFactory *display_factory);
void gimp_display_shell_reconnect (GimpDisplayShell *shell);
Modified: trunk/app/gui/gui-vtable.c
==============================================================================
--- trunk/app/gui/gui-vtable.c (original)
+++ trunk/app/gui/gui-vtable.c Sun Mar 23 13:40:39 2008
@@ -64,6 +64,8 @@
#include "menus/menus.h"
+#include "dialogs/dialogs.h"
+
#include "gui-message.h"
#include "gui-vtable.h"
#include "themes.h"
@@ -300,7 +302,8 @@
display = gimp_display_new (gimp, image, unit, scale,
global_menu_factory,
- image_managers->data);
+ image_managers->data,
+ global_display_factory);
}
if (gimp_context_get_display (context) == display)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]