[gtk+] color-swatch: derive directly from GtkWidget



commit 8e85702dcab83b2f9c6a25e9d9ebf6a541ef8e95
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Fri Feb 17 18:31:19 2012 +0100

    color-swatch: derive directly from GtkWidget
    
    Instead of GtkDrawingArea, since that calls in realize
    gtk_style_context_set_background(). We don't want that to happen, given
    that we do all the painting ourselves in _draw().

 gtk/gtkcolorswatch.c        |   31 ++++++++++++++++++++++++++++++-
 gtk/gtkcolorswatchprivate.h |    4 ++--
 2 files changed, 32 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index 0996dcd..f0bde91 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -62,7 +62,7 @@ enum
 
 static guint signals[LAST_SIGNAL];
 
-G_DEFINE_TYPE (GtkColorSwatch, gtk_color_swatch, GTK_TYPE_DRAWING_AREA)
+G_DEFINE_TYPE (GtkColorSwatch, gtk_color_swatch, GTK_TYPE_WIDGET)
 
 static void
 gtk_color_swatch_init (GtkColorSwatch *swatch)
@@ -495,6 +495,34 @@ swatch_button_release (GtkWidget      *widget,
   return FALSE;
 }
 
+static void
+swatch_realize (GtkWidget *widget)
+{
+  GtkAllocation allocation;
+  GdkWindow *window;
+  GdkWindowAttr attributes;
+  gint attributes_mask;
+
+  gtk_widget_set_realized (widget, TRUE);
+  gtk_widget_get_allocation (widget, &allocation);
+
+  attributes.window_type = GDK_WINDOW_CHILD;
+  attributes.x = allocation.x;
+  attributes.y = allocation.y;
+  attributes.width = allocation.width;
+  attributes.height = allocation.height;
+  attributes.wclass = GDK_INPUT_OUTPUT;
+  attributes.visual = gtk_widget_get_visual (widget);
+  attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK;
+
+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
+
+  window = gdk_window_new (gtk_widget_get_parent_window (widget),
+                           &attributes, attributes_mask);
+  gdk_window_set_user_data (window, widget);
+  gtk_widget_set_window (widget, window);
+}
+
 static gboolean
 swatch_popup_menu (GtkWidget *swatch)
 {
@@ -582,6 +610,7 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class)
   widget_class->button_release_event = swatch_button_release;
   widget_class->enter_notify_event = swatch_enter_notify;
   widget_class->leave_notify_event = swatch_leave_notify;
+  widget_class->realize = swatch_realize;
 
   signals[ACTIVATE] =
     g_signal_new ("activate",
diff --git a/gtk/gtkcolorswatchprivate.h b/gtk/gtkcolorswatchprivate.h
index 4f236ab..6b5d7f1 100644
--- a/gtk/gtkcolorswatchprivate.h
+++ b/gtk/gtkcolorswatchprivate.h
@@ -42,7 +42,7 @@ typedef struct _GtkColorSwatchPrivate GtkColorSwatchPrivate;
 
 struct _GtkColorSwatch
 {
-  GtkDrawingArea parent;
+  GtkWidget parent;
 
   /*< private >*/
   GtkColorSwatchPrivate *priv;
@@ -50,7 +50,7 @@ struct _GtkColorSwatch
 
 struct _GtkColorSwatchClass
 {
-  GtkDrawingAreaClass parent_class;
+  GtkWidgetClass parent_class;
 
   void ( * activate)  (GtkColorSwatch *swatch);
   void ( * customize) (GtkColorSwatch *swatch);



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