]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktoolbar.c
Add gtk_widget_get/set_opacity
[~andy/gtk] / gtk / gtktoolbar.c
index 69fd2b3e5184d45a08b9242310e1a13201cb8daf..0ca1b7eea4d93f3b69ac0becfc1ba977888e163e 100644 (file)
@@ -44,6 +44,7 @@
 #include "gtkmarshalers.h"
 #include "gtkmenu.h"
 #include "gtkorientable.h"
+#include "gtkorientableprivate.h"
 #include "gtkradiobutton.h"
 #include "gtkradiotoolbutton.h"
 #include "gtkseparatormenuitem.h"
@@ -230,8 +231,6 @@ static GtkWidgetPath * gtk_toolbar_get_path_for_child
                                                    GtkWidget           *child);
 static void       gtk_toolbar_invalidate_order    (GtkToolbar           *toolbar);
 
-static void       gtk_toolbar_direction_changed    (GtkWidget           *widget,
-                                                    GtkTextDirection     previous_direction);
 static void       gtk_toolbar_orientation_changed  (GtkToolbar          *toolbar,
                                                    GtkOrientation       orientation);
 static void       gtk_toolbar_real_style_changed   (GtkToolbar          *toolbar,
@@ -395,7 +394,6 @@ gtk_toolbar_class_init (GtkToolbarClass *klass)
   widget_class->unmap = gtk_toolbar_unmap;
   widget_class->popup_menu = gtk_toolbar_popup_menu;
   widget_class->show_all = gtk_toolbar_show_all;
-  widget_class->direction_changed = gtk_toolbar_direction_changed;
   
   container_class->add    = gtk_toolbar_add;
   container_class->remove = gtk_toolbar_remove;
@@ -846,7 +844,7 @@ gtk_toolbar_realize (GtkWidget *widget)
 
   priv->event_window = gdk_window_new (gtk_widget_get_parent_window (widget),
                                       &attributes, attributes_mask);
-  gdk_window_set_user_data (priv->event_window, toolbar);
+  gtk_widget_register_window (widget, priv->event_window);
 }
 
 static void
@@ -857,7 +855,7 @@ gtk_toolbar_unrealize (GtkWidget *widget)
 
   if (priv->event_window)
     {
-      gdk_window_set_user_data (priv->event_window, NULL);
+      gtk_widget_unregister_window (widget, priv->event_window);
       gdk_window_destroy (priv->event_window);
       priv->event_window = NULL;
     }
@@ -2091,7 +2089,7 @@ gtk_toolbar_screen_changed (GtkWidget *widget,
   if (old_settings)
     {
       g_signal_handler_disconnect (old_settings, priv->settings_connection);
-
+      priv->settings_connection = 0;
       g_object_unref (old_settings);
     }
 
@@ -2578,6 +2576,7 @@ gtk_toolbar_orientation_changed (GtkToolbar    *toolbar,
       
       gtk_toolbar_reconfigured (toolbar);
       
+      _gtk_orientable_set_style_classes (GTK_ORIENTABLE (toolbar));
       gtk_widget_queue_resize (GTK_WIDGET (toolbar));
       g_object_notify (G_OBJECT (toolbar), "orientation");
     }
@@ -3122,6 +3121,14 @@ gtk_toolbar_dispose (GObject *object)
       priv->menu = NULL;
     }
 
+  if (priv->settings_connection > 0)
+    {
+      g_signal_handler_disconnect (priv->settings, priv->settings_connection);
+      priv->settings_connection = 0;
+    }
+
+  g_clear_object (&priv->settings);
+
  G_OBJECT_CLASS (gtk_toolbar_parent_class)->dispose (object);
 }
 
@@ -3326,18 +3333,12 @@ calculate_max_homogeneous_pixels (GtkWidget *widget)
 {
   PangoContext *context;
   PangoFontMetrics *metrics;
-  const PangoFontDescription *font_desc;
-  GtkStyleContext *style_context;
-  GtkStateFlags state;
   gint char_width;
   
   context = gtk_widget_get_pango_context (widget);
-  style_context = gtk_widget_get_style_context (widget);
-  state = gtk_widget_get_state_flags (widget);
 
-  font_desc = gtk_style_context_get_font (style_context, state);
-
-  metrics = pango_context_get_metrics (context, font_desc,
+  metrics = pango_context_get_metrics (context,
+                                       pango_context_get_font_description (context),
                                       pango_context_get_language (context));
   char_width = pango_font_metrics_get_approximate_char_width (metrics);
   pango_font_metrics_unref (metrics);
@@ -3854,10 +3855,6 @@ gtk_toolbar_get_visible_position (GtkToolbar *toolbar,
 
   g_assert (count.found);
 
-  if (toolbar->priv->orientation == GTK_ORIENTATION_HORIZONTAL &&
-      gtk_widget_get_direction (GTK_WIDGET (toolbar)) == GTK_TEXT_DIR_RTL)
-    return count.after;
-
   return count.before;
 }
 
@@ -3878,23 +3875,18 @@ gtk_toolbar_get_path_for_child (GtkContainer *container,
 {
   GtkWidgetPath *path;
   GtkToolbar *toolbar;
-  GtkToolbarPrivate *priv;
   GtkWidgetPath *sibling_path;
   gint vis_index;
   GList *children;
 
   toolbar = GTK_TOOLBAR (container);
-  priv = toolbar->priv;
 
   /* build a path for all the visible children;
    * get_children works in visible order
    */
   sibling_path = gtk_widget_path_new ();
   children = _gtk_container_get_all_children (container);
-
-  if (priv->orientation != GTK_ORIENTATION_HORIZONTAL ||
-      gtk_widget_get_direction (GTK_WIDGET (toolbar)) != GTK_TEXT_DIR_RTL)
-    children = g_list_reverse (children);
+  children = g_list_reverse (children);
 
   g_list_foreach (children, add_widget_to_path, sibling_path);
   g_list_free (children);
@@ -3932,12 +3924,3 @@ gtk_toolbar_invalidate_order (GtkToolbar *toolbar)
                         NULL);
 }
 
-static void
-gtk_toolbar_direction_changed (GtkWidget        *widget,
-                               GtkTextDirection  previous_direction)
-{
-  GTK_WIDGET_CLASS (gtk_toolbar_parent_class)->direction_changed (widget, previous_direction);
-
-  gtk_toolbar_invalidate_order (GTK_TOOLBAR (widget));
-}
-