OSDN Git Service

MacGui: Remove Target Size as a rate control option as it doesn't really work correct...
[handbrake-jp/handbrake-jp-git.git] / gtk / src / ghbcompositor.c
index 11e1441..d151734 100644 (file)
@@ -288,21 +288,21 @@ ghb_compositor_new (void)
 static void
 showtype(const gchar *msg, GtkWidget *widget)
 {
-       GType type;
-       gchar *str;
-
-       type = GTK_WIDGET_TYPE(widget);
-       if (type == GTK_TYPE_DRAWING_AREA)
-               str = "drawing area";
-       else if (type == GTK_TYPE_ALIGNMENT)
-               str = "alignment";
-       else if (type == GTK_TYPE_EVENT_BOX)
-               str = "event box";
-       else if (type == GTK_TYPE_EVENT_BOX)
-               str = "event box";
-       else
-               str = "unknown";
-       g_message("%s: %s", msg, str);
+    GType type;
+    gchar *str;
+
+    type = GTK_WIDGET_TYPE(widget);
+    if (type == GTK_TYPE_DRAWING_AREA)
+        str = "drawing area";
+    else if (type == GTK_TYPE_ALIGNMENT)
+        str = "alignment";
+    else if (type == GTK_TYPE_EVENT_BOX)
+        str = "event box";
+    else if (type == GTK_TYPE_EVENT_BOX)
+        str = "event box";
+    else
+        str = "unknown";
+    g_message("%s: %s", msg, str);
 }
 #endif
 
@@ -354,7 +354,6 @@ ghb_compositor_zlist_insert (
     gint z_pos, 
     gdouble opacity)
 {
-    GtkWidget *widget;
     GhbCompositorChild *cc;
     GdkDisplay *display;
 
@@ -362,18 +361,18 @@ ghb_compositor_zlist_insert (
     g_return_if_fail (GTK_IS_WIDGET (child));
     g_return_if_fail (child->parent == NULL);
 
-    widget = GTK_WIDGET (compositor);
+    gtk_widget_set_parent(child, GTK_WIDGET(compositor));
+
+    display = gtk_widget_get_display (GTK_WIDGET(compositor));
 
     cc = g_new(GhbCompositorChild, 1);
     cc->widget = child;
     cc->z_pos = z_pos;
     cc->opacity = opacity;
+    cc->drawables = NULL;
     compositor->children = g_list_insert_sorted(
                                 compositor->children, cc, zsort);
 
-    gtk_widget_set_parent(child, GTK_WIDGET(compositor));
-
-    display = gtk_widget_get_display (GTK_WIDGET(compositor));
     if (gdk_display_supports_composite(display))
     {
         GList *link;
@@ -571,6 +570,7 @@ ghb_compositor_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
         child_allocation.x = 0;
         child_allocation.y = 0;
     }
+
     child_allocation.width = MAX (allocation->width - 
                                 GTK_CONTAINER (widget)->border_width * 2, 0);
     child_allocation.height = MAX (allocation->height - 
@@ -590,7 +590,8 @@ ghb_compositor_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
     for (link = compositor->children; link != NULL; link = link->next)
     {
         cc = (GhbCompositorChild*)link->data;
-        gtk_widget_size_allocate (cc->widget, &child_allocation);
+       if (GTK_WIDGET_REALIZED (cc->widget))
+               gtk_widget_size_allocate (cc->widget, &child_allocation);
     }
 }
 
@@ -604,6 +605,7 @@ ghb_compositor_blend (GtkWidget *widget, GdkEventExpose *event)
     cairo_t *cr;
     GhbCompositorChild *cc;
 
+    if (compositor->children == NULL) return;
     /* create a cairo context to draw to the window */
     cr = gdk_cairo_create (widget->window);
 
@@ -615,6 +617,10 @@ ghb_compositor_blend (GtkWidget *widget, GdkEventExpose *event)
         {
             /* get our child */
             child = GTK_WIDGET(draw->data);
+            if (!GTK_WIDGET_VISIBLE(cc->widget) || 
+                !GTK_WIDGET_VISIBLE(child))
+                continue;
+
             /* the source data is the (composited) event box */
             gdk_cairo_set_source_pixmap (cr, child->window,
                                         child->allocation.x,