]> Pileus Git - ~andy/gtk/commitdiff
applied patch to fix draw_indicator behaviour from Lars Hamann and Stefan
authorTim Janik <timj@gimp.org>
Tue, 17 Feb 1998 06:03:40 +0000 (06:03 +0000)
committerTim Janik <timj@src.gnome.org>
Tue, 17 Feb 1998 06:03:40 +0000 (06:03 +0000)
Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>

        * gtk/gtkcheckbutton.c:
        * gtk/gtkradiobutton.c:
        * gtk/gtktogglebutton.c:
          applied patch to fix draw_indicator behaviour from Lars Hamann
          and Stefan Jeske.

        * gtk/gtkmain.h:
        * gtk/gtkmain.c (gtk_grab_get_current): new function
          that returns the current grab widget or NULL.

        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
          shape mask if mask==NULL (provided by Stefan Wille).

15 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gdk/gdkwindow.c
gdk/x11/gdkwindow-x11.c
gtk/gtkcheckbutton.c
gtk/gtkmain.c
gtk/gtkmain.h
gtk/gtkradiobutton.c
gtk/gtktogglebutton.c
gtk/gtkwidget.c

index 3cadc4db26751c0ccfc3e67859f50a6f7657acb2..119c318f8c25aa77a75e94bf1c1208fd1b6d8a33 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>
+
+        * gtk/gtkcheckbutton.c:
+        * gtk/gtkradiobutton.c:
+        * gtk/gtktogglebutton.c:
+          applied patch to fix draw_indicator behaviour from Lars Hamann
+          and Stefan Jeske.
+
+        * gtk/gtkmain.h:
+        * gtk/gtkmain.c (gtk_grab_get_current): new function
+          that returns the current grab widget or NULL.
+
+        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
+          shape mask if mask==NULL (provided by Stefan Wille).
+
 Tue Feb 17 00:06:26 1998  Owen Taylor  <owt1@cornell.edu>
 
        * gtk/gtkpaned.c, gtk/gtk[hv]paned.c: (gtk-fortier-980215-0)
index 3cadc4db26751c0ccfc3e67859f50a6f7657acb2..119c318f8c25aa77a75e94bf1c1208fd1b6d8a33 100644 (file)
@@ -1,3 +1,18 @@
+Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>
+
+        * gtk/gtkcheckbutton.c:
+        * gtk/gtkradiobutton.c:
+        * gtk/gtktogglebutton.c:
+          applied patch to fix draw_indicator behaviour from Lars Hamann
+          and Stefan Jeske.
+
+        * gtk/gtkmain.h:
+        * gtk/gtkmain.c (gtk_grab_get_current): new function
+          that returns the current grab widget or NULL.
+
+        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
+          shape mask if mask==NULL (provided by Stefan Wille).
+
 Tue Feb 17 00:06:26 1998  Owen Taylor  <owt1@cornell.edu>
 
        * gtk/gtkpaned.c, gtk/gtk[hv]paned.c: (gtk-fortier-980215-0)
index 3cadc4db26751c0ccfc3e67859f50a6f7657acb2..119c318f8c25aa77a75e94bf1c1208fd1b6d8a33 100644 (file)
@@ -1,3 +1,18 @@
+Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>
+
+        * gtk/gtkcheckbutton.c:
+        * gtk/gtkradiobutton.c:
+        * gtk/gtktogglebutton.c:
+          applied patch to fix draw_indicator behaviour from Lars Hamann
+          and Stefan Jeske.
+
+        * gtk/gtkmain.h:
+        * gtk/gtkmain.c (gtk_grab_get_current): new function
+          that returns the current grab widget or NULL.
+
+        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
+          shape mask if mask==NULL (provided by Stefan Wille).
+
 Tue Feb 17 00:06:26 1998  Owen Taylor  <owt1@cornell.edu>
 
        * gtk/gtkpaned.c, gtk/gtk[hv]paned.c: (gtk-fortier-980215-0)
index 3cadc4db26751c0ccfc3e67859f50a6f7657acb2..119c318f8c25aa77a75e94bf1c1208fd1b6d8a33 100644 (file)
@@ -1,3 +1,18 @@
+Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>
+
+        * gtk/gtkcheckbutton.c:
+        * gtk/gtkradiobutton.c:
+        * gtk/gtktogglebutton.c:
+          applied patch to fix draw_indicator behaviour from Lars Hamann
+          and Stefan Jeske.
+
+        * gtk/gtkmain.h:
+        * gtk/gtkmain.c (gtk_grab_get_current): new function
+          that returns the current grab widget or NULL.
+
+        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
+          shape mask if mask==NULL (provided by Stefan Wille).
+
 Tue Feb 17 00:06:26 1998  Owen Taylor  <owt1@cornell.edu>
 
        * gtk/gtkpaned.c, gtk/gtk[hv]paned.c: (gtk-fortier-980215-0)
index 3cadc4db26751c0ccfc3e67859f50a6f7657acb2..119c318f8c25aa77a75e94bf1c1208fd1b6d8a33 100644 (file)
@@ -1,3 +1,18 @@
+Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>
+
+        * gtk/gtkcheckbutton.c:
+        * gtk/gtkradiobutton.c:
+        * gtk/gtktogglebutton.c:
+          applied patch to fix draw_indicator behaviour from Lars Hamann
+          and Stefan Jeske.
+
+        * gtk/gtkmain.h:
+        * gtk/gtkmain.c (gtk_grab_get_current): new function
+          that returns the current grab widget or NULL.
+
+        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
+          shape mask if mask==NULL (provided by Stefan Wille).
+
 Tue Feb 17 00:06:26 1998  Owen Taylor  <owt1@cornell.edu>
 
        * gtk/gtkpaned.c, gtk/gtk[hv]paned.c: (gtk-fortier-980215-0)
index 3cadc4db26751c0ccfc3e67859f50a6f7657acb2..119c318f8c25aa77a75e94bf1c1208fd1b6d8a33 100644 (file)
@@ -1,3 +1,18 @@
+Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>
+
+        * gtk/gtkcheckbutton.c:
+        * gtk/gtkradiobutton.c:
+        * gtk/gtktogglebutton.c:
+          applied patch to fix draw_indicator behaviour from Lars Hamann
+          and Stefan Jeske.
+
+        * gtk/gtkmain.h:
+        * gtk/gtkmain.c (gtk_grab_get_current): new function
+          that returns the current grab widget or NULL.
+
+        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
+          shape mask if mask==NULL (provided by Stefan Wille).
+
 Tue Feb 17 00:06:26 1998  Owen Taylor  <owt1@cornell.edu>
 
        * gtk/gtkpaned.c, gtk/gtk[hv]paned.c: (gtk-fortier-980215-0)
index 3cadc4db26751c0ccfc3e67859f50a6f7657acb2..119c318f8c25aa77a75e94bf1c1208fd1b6d8a33 100644 (file)
@@ -1,3 +1,18 @@
+Tue Feb 17 05:41:31 1998  Tim Janik  <timj@gimp.org>
+
+        * gtk/gtkcheckbutton.c:
+        * gtk/gtkradiobutton.c:
+        * gtk/gtktogglebutton.c:
+          applied patch to fix draw_indicator behaviour from Lars Hamann
+          and Stefan Jeske.
+
+        * gtk/gtkmain.h:
+        * gtk/gtkmain.c (gtk_grab_get_current): new function
+          that returns the current grab widget or NULL.
+
+        * gdk/gdkwindow.c (gdk_window_shape_combine_mask): remove
+          shape mask if mask==NULL (provided by Stefan Wille).
+
 Tue Feb 17 00:06:26 1998  Owen Taylor  <owt1@cornell.edu>
 
        * gtk/gtkpaned.c, gtk/gtk[hv]paned.c: (gtk-fortier-980215-0)
index 129fea3b7c24e361937153ca657c19ee354d1bdf..90cfa4a5e08530b73bdd17eb28de4d4bc7cf6336 100644 (file)
@@ -1255,21 +1255,33 @@ gdk_window_shape_combine_mask (GdkWindow *window,
                               gint x, gint y)
 {
   GdkWindowPrivate *window_private;
-  GdkWindowPrivate *pixmap_private;
+  Pixmap pixmap;
 
   g_return_if_fail (window != NULL);
-  g_return_if_fail (mask != NULL);
 
   window_private = (GdkWindowPrivate*) window;
-  pixmap_private = (GdkWindowPrivate*) mask;
   if (window_private->destroyed)
     return;
-       
+
+  if (mask)
+    {
+      GdkWindowPrivate *pixmap_private;
+
+      pixmap_private = (GdkWindowPrivate*) mask;
+      pixmap = (Pixmap) pixmap_private->xwindow;
+    }
+  else
+    {
+      x = 0;
+      y = 0;
+      pixmap = None;
+    }
+
   XShapeCombineMask  (window_private->xdisplay,
                      window_private->xwindow,
                      ShapeBounding,
-                     x, y, /* offset */
-                     (Pixmap)pixmap_private->xwindow,
+                     x, y,
+                     pixmap,
                      ShapeSet);
 }
 
index 129fea3b7c24e361937153ca657c19ee354d1bdf..90cfa4a5e08530b73bdd17eb28de4d4bc7cf6336 100644 (file)
@@ -1255,21 +1255,33 @@ gdk_window_shape_combine_mask (GdkWindow *window,
                               gint x, gint y)
 {
   GdkWindowPrivate *window_private;
-  GdkWindowPrivate *pixmap_private;
+  Pixmap pixmap;
 
   g_return_if_fail (window != NULL);
-  g_return_if_fail (mask != NULL);
 
   window_private = (GdkWindowPrivate*) window;
-  pixmap_private = (GdkWindowPrivate*) mask;
   if (window_private->destroyed)
     return;
-       
+
+  if (mask)
+    {
+      GdkWindowPrivate *pixmap_private;
+
+      pixmap_private = (GdkWindowPrivate*) mask;
+      pixmap = (Pixmap) pixmap_private->xwindow;
+    }
+  else
+    {
+      x = 0;
+      y = 0;
+      pixmap = None;
+    }
+
   XShapeCombineMask  (window_private->xdisplay,
                      window_private->xwindow,
                      ShapeBounding,
-                     x, y, /* offset */
-                     (Pixmap)pixmap_private->xwindow,
+                     x, y,
+                     pixmap,
                      ShapeSet);
 }
 
index 9266120179851aefa6bcc2888d78344a087919c2..c7244f3c416d0e5e526121c65ae21c350c8acfa8 100644 (file)
@@ -157,25 +157,30 @@ static void
 gtk_check_button_draw_focus (GtkWidget *widget)
 {
   GtkCheckButton *check_button;
-
+  
   g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_CHECK_BUTTON (widget));
-
-  if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget))
+  
+  if (GTK_WIDGET_DRAWABLE (widget))
     {
       check_button = GTK_CHECK_BUTTON (widget);
       if (check_button->toggle_button.draw_indicator)
        {
+         gint border_width;
+         
+         border_width = GTK_CONTAINER (widget)->border_width;
          if (GTK_WIDGET_HAS_FOCUS (widget))
            gdk_draw_rectangle (widget->window,
-                               widget->style->black_gc, FALSE, 0, 0,
-                               widget->allocation.width - 1,
-                               widget->allocation.height - 1);
+                               widget->style->black_gc, FALSE,
+                               border_width, border_width,
+                               widget->allocation.width - 2 * border_width - 1,
+                               widget->allocation.height - 2 * border_width - 1);
          else
            gdk_draw_rectangle (widget->window,
-                               widget->style->bg_gc[GTK_STATE_NORMAL], FALSE, 0, 0,
-                               widget->allocation.width - 1,
-                               widget->allocation.height - 1);
+                               widget->style->bg_gc[GTK_STATE_NORMAL], FALSE,
+                               border_width, border_width,
+                               widget->allocation.width - 2 * border_width - 1,
+                               widget->allocation.height - 2 * border_width - 1);
        }
       else
        {
@@ -322,6 +327,8 @@ gtk_real_check_button_draw_indicator (GtkCheckButton *check_button,
   GtkToggleButton *toggle_button;
   GtkStateType state_type;
   GtkShadowType shadow_type;
+  GdkRectangle restrict_area;
+  GdkRectangle new_area;
   gint width, height;
   gint x, y;
 
@@ -338,9 +345,18 @@ gtk_real_check_button_draw_indicator (GtkCheckButton *check_button,
          (state_type != GTK_STATE_PRELIGHT))
        state_type = GTK_STATE_NORMAL;
 
-      gtk_style_set_background (widget->style, widget->window, state_type);
-      gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height);
+      restrict_area.x = GTK_CONTAINER (widget)->border_width;
+      restrict_area.y = restrict_area.x;
+      restrict_area.width = widget->allocation.width - restrict_area.x * 2;
+      restrict_area.height = widget->allocation.height - restrict_area.x * 2;
 
+      if (gdk_rectangle_intersect (area, &restrict_area, &new_area))
+       {
+         gtk_style_set_background (widget->style, widget->window, state_type);
+         gdk_window_clear_area (widget->window, new_area.x, new_area.y,
+                                new_area.width, new_area.height);
+       }
+      
       x = CHECK_BUTTON_CLASS (widget)->indicator_spacing + GTK_CONTAINER (widget)->border_width;
       y = (widget->allocation.height - CHECK_BUTTON_CLASS (widget)->indicator_size) / 2;
       width = CHECK_BUTTON_CLASS (widget)->indicator_size;
index c9612b45a3601f8dab2679fb3b42f887b9d7108c..2980150e01c76838d8403aa491b0fc9b945d131d 100644 (file)
@@ -514,6 +514,14 @@ gtk_grab_add (GtkWidget *widget)
     }
 }
 
+GtkWidget*
+gtk_grab_get_current (void)
+{
+  if (grabs)
+    return GTK_WIDGET (grabs->data);
+  return NULL;
+}
+
 void
 gtk_grab_remove (GtkWidget *widget)
 {
index 8b2009a7eb2a4e1e35180a3be5ff218353d1cbe3..0dbd4cc43cb2ac367be46351f7938b89df9373af 100644 (file)
@@ -51,20 +51,21 @@ gint           gtk_main_iteration    (void);
 /* gtk_main_iteration() calls gtk_main_iteration_do(TRUE) */
 gint      gtk_main_iteration_do (gboolean blocking);
 
-gint      gtk_true              (void);
-gint      gtk_false             (void);
+gint      gtk_true                (void);
+gint      gtk_false               (void);
 
-void      gtk_grab_add          (GtkWidget     *widget);
-void      gtk_grab_remove       (GtkWidget     *widget);
+void      gtk_grab_add            (GtkWidget   *widget);
+GtkWidget* gtk_grab_get_current           (void);
+void      gtk_grab_remove         (GtkWidget   *widget);
 
-void      gtk_init_add          (GtkFunction    function,
-                                 gpointer       data);
+void      gtk_init_add            (GtkFunction  function,
+                                   gpointer     data);
 
-gint       gtk_timeout_add_full   (guint32            interval,
-                                  GtkFunction        function,
-                                  GtkCallbackMarshal marshal,
-                                  gpointer           data,
-                                  GtkDestroyNotify   destroy);
+gint       gtk_timeout_add_full    (guint32            interval,
+                                   GtkFunction        function,
+                                   GtkCallbackMarshal marshal,
+                                   gpointer           data,
+                                   GtkDestroyNotify   destroy);
 gint      gtk_timeout_add         (guint32        interval,
                                    GtkFunction    function,
                                    gpointer       data);
index 1e9a36886b946499dee655ca6a76839fd5a4cc6c..17b98002779d69fbb32e9e4969d840fb39d015da 100644 (file)
@@ -270,6 +270,8 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button,
   GtkToggleButton *toggle_button;
   GtkStateType state_type;
   GtkShadowType shadow_type;
+  GdkRectangle restrict_area;
+  GdkRectangle new_area;
   GdkPoint pts[4];
   gint width, height;
   gint x, y;
@@ -288,9 +290,18 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button,
          (state_type != GTK_STATE_PRELIGHT))
        state_type = GTK_STATE_NORMAL;
 
-      gtk_style_set_background (widget->style, widget->window, state_type);
-      gdk_window_clear_area (widget->window, area->x, area->y, area->width, area->height);
+      restrict_area.x = GTK_CONTAINER (widget)->border_width;
+      restrict_area.y = restrict_area.x;
+      restrict_area.width = widget->allocation.width - restrict_area.x * 2;
+      restrict_area.height = widget->allocation.height - restrict_area.x * 2;
 
+      if (gdk_rectangle_intersect (area, &restrict_area, &new_area))
+       {
+         gtk_style_set_background (widget->style, widget->window, state_type);
+         gdk_window_clear_area (widget->window, new_area.x, new_area.y,
+                                new_area.width, new_area.height);
+       }
+      
       x = CHECK_BUTTON_CLASS (widget)->indicator_spacing + GTK_CONTAINER (widget)->border_width;
       y = (widget->allocation.height - CHECK_BUTTON_CLASS (widget)->indicator_size) / 2;
       width = CHECK_BUTTON_CLASS (widget)->indicator_size;
index be39f8b1f57cfbbcf6bf36b8208fe61a66331e72..fa1e3c2adf7a0fba13e5ecb6e85066b8402daf46 100644 (file)
@@ -181,15 +181,15 @@ gtk_toggle_button_draw_focus (GtkWidget *widget)
   g_return_if_fail (widget != NULL);
   g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));
 
-  if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_MAPPED (widget))
+  if  (GTK_WIDGET_DRAWABLE (widget))
     {
       button = GTK_BUTTON (widget);
       toggle_button = GTK_TOGGLE_BUTTON (widget);
 
       x = 0;
       y = 0;
-      width = widget->allocation.width;
-      height = widget->allocation.height;
+      width = widget->allocation.width  - GTK_CONTAINER (widget)->border_width * 2;
+      height = widget->allocation.height  - GTK_CONTAINER (widget)->border_width * 2;
 
       if (GTK_WIDGET_CAN_DEFAULT (widget))
         {
index 6f3f26541253f4b92caf4c04fe2e00993bf8080f..024c648c01e5aa656e8cf68f18e44a8c8dcb4b19 100644 (file)
@@ -3728,20 +3728,17 @@ gtk_widget_shape_combine_mask (GtkWidget *widget,
     {
       GTK_PRIVATE_UNSET_FLAG (widget, GTK_HAS_SHAPE_MASK);
       
+      if (widget->window)
+       gdk_window_shape_combine_mask (widget->window, NULL, 0, 0);
+      
       shape_info = gtk_object_get_data (GTK_OBJECT (widget), shape_info_key);
       gtk_object_remove_data (GTK_OBJECT (widget), shape_info_key);
       g_free (shape_info);
-
-      if (widget->window)
-       {
-         /* FIXME: we need gdk code here that removes the shape from a window
-          */
-       }
     }
   else
     {
       GTK_PRIVATE_SET_FLAG (widget, GTK_HAS_SHAPE_MASK);
-
+      
       shape_info = gtk_object_get_data (GTK_OBJECT (widget), shape_info_key);
       if (!shape_info)
        {