]> spindle.queued.net Git - midori/commitdiff
Don't rely on GTK_ENTRY_CLASS (entry)->get_text_area_size
authorChristian Dywan <christian@twotoasts.de>
Sun, 31 Aug 2008 08:41:21 +0000 (10:41 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 31 Aug 2008 08:41:21 +0000 (10:41 +0200)
midori/midori-locationentry.c

index 70466eaf9b23f7fdc11bd508878c6cdc8d847c8e..432a6bed21103670ab08c1f54c6aa307d512546f 100644 (file)
@@ -151,6 +151,78 @@ _gtk_entry_effective_inner_border (GtkEntry  *entry,
   *border = default_inner_border;
 }
 
+void
+gtk_entry_borders (GtkEntry* entry,
+                   gint*     xborder,
+                   gint*     yborder,
+                   gboolean* interior_focus,
+                   gint*     focus_width)
+{
+  GtkWidget *widget = GTK_WIDGET (entry);
+
+  if (entry->has_frame)
+    {
+      *xborder = widget->style->xthickness;
+      *yborder = widget->style->ythickness;
+    }
+  else
+    {
+      *xborder = 0;
+      *yborder = 0;
+    }
+
+  gtk_widget_style_get (widget, "interior-focus", interior_focus,
+                        "focus-line-width", focus_width, NULL);
+
+  if (interior_focus)
+    {
+      *xborder += *focus_width;
+      *yborder += *focus_width;
+    }
+}
+
+/* GTK+/ GtkEntry internal helper function
+   Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+   Modified by the GTK+ Team and others 1997-2000
+   Copied from Gtk+ 2.13, whitespace adjusted */
+static void
+gtk_entry_get_text_area_size (GtkEntry *entry,
+                              gint     *x,
+                              gint     *y,
+                              gint     *width,
+                              gint     *height)
+{
+  gint frame_height;
+  gint xborder, yborder;
+  gboolean interior_focus;
+  gint focus_width;
+  GtkRequisition requisition;
+  GtkWidget *widget = GTK_WIDGET (entry);
+
+  gtk_widget_get_child_requisition (widget, &requisition);
+  gtk_entry_borders (entry, &xborder, &yborder, &interior_focus, &focus_width);
+
+  if (GTK_WIDGET_REALIZED (widget))
+    gdk_drawable_get_size (widget->window, NULL, &frame_height);
+  else
+    frame_height = requisition.height;
+
+  if (GTK_WIDGET_HAS_FOCUS (widget) && interior_focus)
+      frame_height -= 2 * focus_width;
+
+  if (x)
+    *x = xborder;
+
+  if (y)
+    *y = frame_height / 2 - (requisition.height - yborder * 2) / 2;
+
+  if (width)
+    *width = GTK_WIDGET (entry)->allocation.width - xborder * 2;
+
+  if (height)
+    *height = requisition.height - yborder * 2;
+}
+
 /* GTK+/ GtkEntry internal helper function
    Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
    Modified by the GTK+ Team and others 1997-2000
@@ -169,7 +241,7 @@ get_layout_position (GtkEntry *entry,
 
   layout = gtk_entry_get_layout (entry);
 
-  GTK_ENTRY_CLASS (G_OBJECT_GET_CLASS (entry))->get_text_area_size (entry, NULL, NULL, &area_width, &area_height);
+  gtk_entry_get_text_area_size (entry, NULL, NULL, &area_width, &area_height);
   _gtk_entry_effective_inner_border (entry, &inner_border);
 
   area_height = PANGO_SCALE * (area_height - inner_border.top - inner_border.bottom);