gimp r25155 - in branches/weskaggs: . app/display



Author: weskaggs
Date: Fri Mar 21 16:53:31 2008
New Revision: 25155
URL: http://svn.gnome.org/viewvc/gimp?rev=25155&view=rev

Log:
Bill Skaggs  <weskaggs primate ucdavis edu>

	* app/display/gimpdisplayshell.[ch]
	* app/display/gimpdisplayshell-scale.c
	* app/display/gimpdisplayshell-progress.c: make GimpDisplayShell
	a non-toplevel, and create a simple window to hold it.  This is
	a transitional step toward making the image display dockable.


Modified:
   branches/weskaggs/ChangeLog
   branches/weskaggs/app/display/gimpdisplay.c
   branches/weskaggs/app/display/gimpdisplayshell-progress.c
   branches/weskaggs/app/display/gimpdisplayshell-scale.c
   branches/weskaggs/app/display/gimpdisplayshell.c
   branches/weskaggs/app/display/gimpdisplayshell.h

Modified: branches/weskaggs/app/display/gimpdisplay.c
==============================================================================
--- branches/weskaggs/app/display/gimpdisplay.c	(original)
+++ branches/weskaggs/app/display/gimpdisplay.c	Fri Mar 21 16:53:31 2008
@@ -342,9 +342,10 @@
                   GimpMenuFactory *menu_factory,
                   GimpUIManager   *popup_manager)
 {
-  GimpDisplay *display;
-  Gimp        *gimp;
-  gint         ID;
+  GimpDisplay      *display;
+  Gimp             *gimp;
+  gint              ID;
+  GimpDisplayShell *shell;
 
   g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
@@ -373,7 +374,10 @@
   /*  create the shell for the image  */
   display->shell = gimp_display_shell_new (display, unit, scale,
                                            menu_factory, popup_manager);
+  shell = GIMP_DISPLAY_SHELL (display->shell);
+  gimp_display_shell_shrink_wrap (shell);
   gtk_widget_show (display->shell);
+  gtk_widget_show (GTK_WIDGET (shell->container_window));
 
   g_signal_connect (GIMP_DISPLAY_SHELL (display->shell)->statusbar, "cancel",
                     G_CALLBACK (gimp_display_progress_canceled),
@@ -476,8 +480,10 @@
   height = SCALEY (shell, gimp_image_get_height (image));
   gtk_widget_set_size_request (display->shell, width,
                                height + toolbar_height + menubar_height);
-
+  gtk_window_resize (shell->container_window, width,
+                     height + toolbar_height + menubar_height);
   gtk_widget_show (display->shell);
+  gtk_widget_show (GTK_WIDGET (shell->container_window));
 
   g_signal_connect (GIMP_DISPLAY_SHELL (display->shell)->statusbar, "cancel",
                     G_CALLBACK (gimp_display_progress_canceled),
@@ -628,7 +634,9 @@
 
   /* make a new scratch image if we need one */
   if (! gimp->exiting && gimp_container_is_empty (gimp->displays))
+    {
       file_create_scratch_image (gimp);
+    }
 }
 
 gint

Modified: branches/weskaggs/app/display/gimpdisplayshell-progress.c
==============================================================================
--- branches/weskaggs/app/display/gimpdisplayshell-progress.c	(original)
+++ branches/weskaggs/app/display/gimpdisplayshell-progress.c	Fri Mar 21 16:53:31 2008
@@ -97,7 +97,7 @@
 {
   GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (progress);
 
-  return (guint32) gimp_window_get_native (GTK_WINDOW (shell));
+  return (guint32) gimp_window_get_native (shell->container_window);
 }
 
 static gboolean

Modified: branches/weskaggs/app/display/gimpdisplayshell-scale.c
==============================================================================
--- branches/weskaggs/app/display/gimpdisplayshell-scale.c	(original)
+++ branches/weskaggs/app/display/gimpdisplayshell-scale.c	Fri Mar 21 16:53:31 2008
@@ -639,7 +639,7 @@
                              (gpointer) &shell->scale_dialog);
 
   gtk_window_set_transient_for (GTK_WINDOW (shell->scale_dialog),
-                                GTK_WINDOW (shell));
+                                shell->container_window);
   gtk_window_set_destroy_with_parent (GTK_WINDOW (shell->scale_dialog), TRUE);
 
   g_signal_connect (shell->scale_dialog, "response",

Modified: branches/weskaggs/app/display/gimpdisplayshell.c
==============================================================================
--- branches/weskaggs/app/display/gimpdisplayshell.c	(original)
+++ branches/weskaggs/app/display/gimpdisplayshell.c	Fri Mar 21 16:53:31 2008
@@ -129,8 +129,12 @@
                                                    (GimpColorManaged *managed,
                                                     gsize            *len);
 
+static void      gimp_display_shell_container_window_closed
+                                                   (GtkWidget        *widget,
+                                                    GdkEvent         *event,
+                                                    GimpDisplayShell *shell);
 
-G_DEFINE_TYPE_WITH_CODE (GimpDisplayShell, gimp_display_shell, GTK_TYPE_WINDOW,
+G_DEFINE_TYPE_WITH_CODE (GimpDisplayShell, gimp_display_shell, GTK_TYPE_VBOX,
                          G_IMPLEMENT_INTERFACE (GIMP_TYPE_PROGRESS,
                                                 gimp_display_shell_progress_iface_init)
                          G_IMPLEMENT_INTERFACE (GIMP_TYPE_COLOR_MANAGED,
@@ -218,6 +222,8 @@
 static void
 gimp_display_shell_init (GimpDisplayShell *shell)
 {
+  shell->container_window       = NULL;
+
   shell->display                = NULL;
 
   shell->menubar_manager        = NULL;
@@ -332,8 +338,6 @@
   shell->highlight              = NULL;
   shell->mask                   = NULL;
 
-  gtk_window_set_role (GTK_WINDOW (shell), "gimp-image-window");
-  gtk_window_set_resizable (GTK_WINDOW (shell), TRUE);
 
   gtk_widget_set_events (GTK_WIDGET (shell), (GDK_POINTER_MOTION_MASK      |
                                               GDK_POINTER_MOTION_HINT_MASK |
@@ -508,6 +512,12 @@
 
   shell->display = NULL;
 
+  if (shell->container_window)
+    {
+      gtk_widget_destroy (GTK_WIDGET (shell->container_window));
+      shell->container_window = NULL;
+    }
+
   GTK_OBJECT_CLASS (parent_class)->destroy (object);
 }
 
@@ -590,7 +600,8 @@
 static void
 gimp_display_shell_real_scaled (GimpDisplayShell *shell)
 {
-  GimpContext *user_context;
+  GimpContext    *user_context;
+  GtkRequisition  requisition;
 
   if (! shell->display)
     return;
@@ -604,6 +615,10 @@
 
   if (shell->display == gimp_context_get_display (user_context))
     gimp_ui_manager_update (shell->popup_manager, shell->display);
+
+/*   gtk_widget_size_request (GTK_WIDGET (shell), &requisition); */
+/*   gtk_window_resize (shell->window, */
+/*                      requisition.width, requisition.height); */
 }
 
 static void
@@ -654,6 +669,7 @@
   GimpDisplayConfig     *display_config;
   GimpColorDisplayStack *filter;
   Gimp                  *gimp;
+  GtkWidget             *container_window;
   GtkWidget             *main_vbox;
   GtkWidget             *disp_vbox;
   GtkWidget             *upper_hbox;
@@ -715,9 +731,6 @@
                                                                   display,
                                                                   FALSE);
 
-  gtk_window_add_accel_group (GTK_WINDOW (shell),
-                              gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (shell->menubar_manager)));
-
   g_signal_connect (shell->menubar_manager, "show-tooltip",
                     G_CALLBACK (gimp_display_shell_show_tooltip),
                     shell);
@@ -1093,6 +1106,19 @@
   gtk_widget_show (GTK_WIDGET (shell->canvas));
   gtk_widget_show (main_vbox);
 
+
+  container_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  shell->container_window = GTK_WINDOW (container_window);
+  gtk_window_set_role (shell->container_window, "gimp-image-window");
+  gtk_window_set_resizable (shell->container_window, TRUE);
+  gtk_container_add (GTK_CONTAINER (container_window), GTK_WIDGET (shell));
+  gtk_window_add_accel_group (shell->container_window,
+                              gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (shell->menubar_manager)));
+
+  g_signal_connect (shell->container_window, "delete-event",
+                    G_CALLBACK (gimp_display_shell_container_window_closed),
+                    shell);
+
   filter = gimp_display_shell_filter_new (shell,
                                           gimp->config->color_management);
   if (filter)
@@ -1111,6 +1137,14 @@
   return GTK_WIDGET (shell);
 }
 
+static void
+gimp_display_shell_container_window_closed (GtkWidget        *widget,
+                                            GdkEvent         *event,
+                                            GimpDisplayShell *shell)
+{
+  gimp_display_delete (shell->display);
+}
+
 void
 gimp_display_shell_set_initial_scale (GimpDisplayShell *shell,
                                       gint             *n_width_ptr,
@@ -1662,7 +1696,7 @@
                                      gimp_get_user_context (image->gimp),
                                      width, height);
 
-  gtk_window_set_icon (GTK_WINDOW (shell), pixbuf);
+  gtk_window_set_icon (shell->container_window, pixbuf);
 }
 
 void
@@ -1730,7 +1764,7 @@
       if (width < shell->statusbar->requisition.width)
         width = shell->statusbar->requisition.width;
 
-      gtk_window_resize (GTK_WINDOW (shell),
+      gtk_window_resize (shell->container_window,
                          width  + border_x,
                          height + border_y);
     }

Modified: branches/weskaggs/app/display/gimpdisplayshell.h
==============================================================================
--- branches/weskaggs/app/display/gimpdisplayshell.h	(original)
+++ branches/weskaggs/app/display/gimpdisplayshell.h	Fri Mar 21 16:53:31 2008
@@ -20,7 +20,7 @@
 #define __GIMP_DISPLAY_SHELL_H__
 
 
-#include <gtk/gtkwindow.h>
+#include <gtk/gtkvbox.h>
 
 #include "libgimpwidgets/gimpwidgets.h"
 
@@ -63,7 +63,9 @@
 
 struct _GimpDisplayShell
 {
-  GtkWindow         parent_instance;
+  GtkVBox           parent_instance;
+
+  GtkWindow        *container_window;
 
   GimpDisplay      *display;
 
@@ -196,7 +198,7 @@
 
 struct _GimpDisplayShellClass
 {
-  GtkWindowClass  parent_class;
+  GtkVBoxClass  parent_class;
 
   void (* scaled)    (GimpDisplayShell *shell);
   void (* scrolled)  (GimpDisplayShell *shell);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]