[gtk+/client-side-decorations: 38/50] fix GtkPlug to always force cs-decorations off



commit e1aad91610920f5e2ddc809a1d78290278342935
Author: Cody Russell <crussell canonical com>
Date:   Mon Jun 8 13:07:52 2009 -0500

    fix GtkPlug to always force cs-decorations off

 gtk/gtkplug.c   |    3 +++
 gtk/gtkwindow.c |   37 ++++++++++++++++++++++++++++++-------
 gtk/gtkwindow.h |    1 +
 3 files changed, 34 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkplug.c b/gtk/gtkplug.c
index 4c31ea7..bfa9c73 100644
--- a/gtk/gtkplug.c
+++ b/gtk/gtkplug.c
@@ -167,6 +167,7 @@ gtk_plug_class_init (GtkPlugClass *class)
 							GDK_TYPE_WINDOW,
 							GTK_PARAM_READABLE));
 
+
   /**
    * GtkPlug::embedded:
    * @plug: the object on which the signal was emitted
@@ -192,6 +193,8 @@ gtk_plug_init (GtkPlug *plug)
   window = GTK_WINDOW (plug);
 
   window->type = GTK_WINDOW_TOPLEVEL;
+
+  gtk_window_disable_client_side_decorations (window);
 }
 
 static void
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index f5137ab..377ec0a 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -203,9 +203,9 @@ struct _GtkWindowPrivate
   guint opacity_set : 1;
   guint builder_visible : 1;
 
-  gboolean client_side_decorated;
   GdkWMDecoration client_side_decorations;
   GdkWMDecoration old_decorations;
+  gboolean        disable_client_side_decorations;
 
   GdkWindowTypeHint type_hint;
 
@@ -1016,9 +1016,9 @@ gtk_window_init (GtkWindow *window)
   priv->type_hint = GDK_WINDOW_TYPE_HINT_NORMAL;
   priv->opacity = 1.0;
   priv->startup_id = NULL;
-  priv->client_side_decorated = TRUE;
   gtk_window_set_client_side_decorations (window, GDK_DECOR_BORDER | GDK_DECOR_TITLE | GDK_DECOR_MAXIMIZE);
   priv->old_decorations = 0;
+  priv->disable_client_side_decorations = FALSE;
 
   label = gtk_label_new ("");
   gtk_widget_show (label);
@@ -3167,6 +3167,29 @@ gtk_window_get_decorated (GtkWindow *window)
   return window->decorated;
 }
 
+/**
+ * gtk_window_disable_client_side_decorations:
+ * @window: a #GtkWindow
+ *
+ * Disables client-side window decorations for the given window.
+ * This is intended to be used by subclasses of GtkWindow that
+ * need to always disable client-side decorations, for example
+ * GtkPlug.  Normally client-side decorations should be
+ * controlled through GtkWindow's client-side-decorated style
+ * property.
+ **/
+void
+gtk_window_disable_client_side_decorations (GtkWindow *window)
+{
+  GtkWindowPrivate *priv;
+
+  g_return_if_fail (GTK_IS_WINDOW (window));
+
+  priv = GTK_WINDOW_GET_PRIVATE (window);
+
+  priv->disable_client_side_decorations = TRUE;
+}
+
 void
 gtk_window_set_client_side_decorations (GtkWindow       *window,
                                         GdkWMDecoration  setting)
@@ -4986,15 +5009,18 @@ gtk_window_unmap (GtkWidget *widget)
 static gboolean
 is_client_side_decorated (GtkWindow *window)
 {
+  GtkWindowPrivate *priv;
   gboolean client_side_decorated;
 
+  priv = GTK_WINDOW_GET_PRIVATE (window);
+
   gtk_widget_style_get (GTK_WIDGET (window),
                         "client-side-decorated", &client_side_decorated,
                         NULL);
 
-  return 1 && window->decorated; // XXX - remove this :)
+  return 1 && window->decorated && !priv->disable_client_side_decorations; // XXX - remove this :)
 
-  return client_side_decorated && window->decorated;
+  return client_side_decorated && window->decorated && !priv->disable_client_side_decorations;
 }
 
 static void
@@ -5605,7 +5631,6 @@ static gboolean
 gtk_window_button_press_event (GtkWidget      *widget,
                                GdkEventButton *event)
 {
-  GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (widget);
   gint x = event->x;
   gint y = event->y;
 
@@ -7176,8 +7201,6 @@ static void
 gtk_window_paint (GtkWidget     *widget,
 		  GdkRectangle *area)
 {
-  GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (widget);
-
 #if 0
   if (is_client_side_decorated (GTK_WINDOW (widget)))
     {
diff --git a/gtk/gtkwindow.h b/gtk/gtkwindow.h
index 73e2993..c565383 100644
--- a/gtk/gtkwindow.h
+++ b/gtk/gtkwindow.h
@@ -274,6 +274,7 @@ gboolean   gtk_window_get_decorated            (GtkWindow *window);
 void       gtk_window_set_client_side_decorations (GtkWindow       *window,
                                                    GdkWMDecoration  decoration);
 GdkWMDecoration gtk_window_get_client_side_decorations (GtkWindow *window);
+void       gtk_window_disable_client_side_decorations (GtkWindow *window);
 void       gtk_window_set_deletable            (GtkWindow *window,
                                                 gboolean   setting);
 gboolean   gtk_window_get_deletable            (GtkWindow *window);



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