[cheese] Make the expose handler shareable



commit 84fc2e2714b660825372e5deeeb842852b309e9f
Author: Bastien Nocera <hadess hadess net>
Date:   Wed Dec 2 11:40:20 2009 +0000

    Make the expose handler shareable

 libcheese/cheese-widget.c |   17 ++++++++++-------
 1 files changed, 10 insertions(+), 7 deletions(-)
---
diff --git a/libcheese/cheese-widget.c b/libcheese/cheese-widget.c
index a3e8fe5..b49c404 100644
--- a/libcheese/cheese-widget.c
+++ b/libcheese/cheese-widget.c
@@ -59,7 +59,7 @@ typedef struct
 G_DEFINE_TYPE (CheeseWidget, cheese_widget, GTK_TYPE_NOTEBOOK);
 
 static GdkPixbuf *
-cheese_widget_load_pixbuf (CheeseWidget *widget,
+cheese_widget_load_pixbuf (GtkWidget *widget,
 			   const char *icon_name,
 			   guint size,
 			   GError **error)
@@ -67,7 +67,7 @@ cheese_widget_load_pixbuf (CheeseWidget *widget,
   GtkIconTheme *theme;
   GdkPixbuf *pixbuf;
 
-  theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (GTK_WIDGET (widget)));
+  theme = gtk_icon_theme_get_for_screen (gtk_widget_get_screen (widget));
   //FIXME special case "no-webcam" and actually use the icon_name
   pixbuf = gtk_icon_theme_load_icon (theme, "error",
 				     size, 0, error);
@@ -77,9 +77,8 @@ cheese_widget_load_pixbuf (CheeseWidget *widget,
 static gboolean
 cheese_widget_logo_expose (GtkWidget *w,
 			   GdkEventExpose *event,
-			   CheeseWidget *widget)
+			   gpointer user_data)
 {
-  CheeseWidgetPrivate *priv = CHEESE_WIDGET_GET_PRIVATE (widget);
   const char *icon_name;
   GdkPixbuf *pixbuf, *logo;
   GError *error = NULL;
@@ -90,7 +89,7 @@ cheese_widget_logo_expose (GtkWidget *w,
 
   gdk_draw_rectangle (w->window, w->style->black_gc, TRUE,
                       0, 0, w->allocation.width, w->allocation.height);
-  icon_name = g_object_get_data (G_OBJECT (priv->problem), "icon-name");
+  icon_name = g_object_get_data (G_OBJECT (w), "icon-name");
   if (icon_name == NULL)
     return FALSE;
 
@@ -102,7 +101,7 @@ cheese_widget_logo_expose (GtkWidget *w,
   d_width = allocation.width;
   d_height = allocation.height - (allocation.height / 3);
 
-  pixbuf = cheese_widget_load_pixbuf (widget, icon_name, d_height, &error);
+  pixbuf = cheese_widget_load_pixbuf (w, icon_name, d_height, &error);
   if (pixbuf == NULL) {
     g_warning ("Could not load icon '%s': %s", icon_name, error->message);
     g_error_free (error);
@@ -166,7 +165,6 @@ cheese_widget_init (CheeseWidget *widget)
   			    priv->screen, gtk_label_new ("webcam"));
 
   priv->problem = gtk_drawing_area_new ();
-  gtk_widget_set_app_paintable (priv->problem, TRUE);
   gtk_notebook_append_page (GTK_NOTEBOOK (widget),
 			    priv->problem,
 			    gtk_label_new ("got problems"));
@@ -320,6 +318,11 @@ cheese_widget_realize (GtkWidget *widget)
     g_error_free (error);
     goto error;
   }
+
+  gtk_widget_set_app_paintable (priv->problem, TRUE);
+  gtk_widget_realize (priv->problem);
+  gdk_window_set_back_pixmap (gtk_widget_get_window (priv->problem), NULL, FALSE);
+
   return;
 
 error:



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