[PATCH] pinentry: More gseal/gtk3 compatibility in the gtk+3 UI.

Dimitri John Ledkov dimitri.j.ledkov at intel.com
Mon Nov 3 12:05:03 CET 2014


Signed-off-by: Dimitri John Ledkov <dimitri.j.ledkov at intel.com>
---
 gtk+-2/gtksecentry.c    | 84 ++++++++++++++++++++++++++++++-------------------
 gtk+-2/pinentry-gtk-2.c | 22 ++++++++-----
 2 files changed, 66 insertions(+), 40 deletions(-)

diff --git a/gtk+-2/gtksecentry.c b/gtk+-2/gtksecentry.c
index 824d45a..1b630ac 100644
--- a/gtk+-2/gtksecentry.c
+++ b/gtk+-2/gtksecentry.c
@@ -802,7 +802,7 @@ gtk_secure_entry_get_property(GObject * object,
 static void
 gtk_secure_entry_init(GtkSecureEntry * entry)
 {
-    GTK_WIDGET_SET_FLAGS(entry, GTK_CAN_FOCUS);
+    gtk_widget_set_can_focus((GtkWidget *)entry, TRUE);
 
     entry->text_size = MIN_SIZE;
     WITH_SECURE_MEM(entry->text = g_malloc(entry->text_size));
@@ -864,7 +864,7 @@ gtk_secure_entry_realize(GtkWidget * widget)
     GdkWindowAttr attributes;
     gint attributes_mask;
 
-    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);
+    gtk_widget_set_realized(widget, TRUE);
     entry = GTK_SECURE_ENTRY(widget);
 
     attributes.window_type = GDK_WINDOW_CHILD;
@@ -888,9 +888,9 @@ gtk_secure_entry_realize(GtkWidget * widget)
     attributes_mask =
 	GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
 
-    widget->window =
+    gtk_widget_set_window (widget,
 	gdk_window_new(gtk_widget_get_parent_window(widget), &attributes,
-		       attributes_mask);
+		       attributes_mask));
     gdk_window_set_user_data(widget->window, entry);
 
     get_text_area_size(entry, &attributes.x, &attributes.y,
@@ -911,10 +911,10 @@ gtk_secure_entry_realize(GtkWidget * widget)
 
     gdk_window_set_background(widget->window,
 			      &widget->style->
-			      base[GTK_WIDGET_STATE(widget)]);
+			      base[gtk_widget_get_state(widget)]);
     gdk_window_set_background(entry->text_area,
 			      &widget->style->
-			      base[GTK_WIDGET_STATE(widget)]);
+			      base[gtk_widget_get_state(widget)]);
 
     gdk_window_show(entry->text_area);
 
@@ -1074,7 +1074,7 @@ gtk_secure_entry_size_allocate(GtkWidget * widget,
 
     widget->allocation = *allocation;
 
-    if (GTK_WIDGET_REALIZED(widget)) {
+    if (gtk_widget_get_realized(widget)) {
 	/* We call gtk_widget_get_child_requisition, since we want (for
 	 * backwards compatibility reasons) the realization here to
 	 * be affected by the usize of the entry, if set
@@ -1105,9 +1105,14 @@ gtk_secure_entry_draw_frame(GtkWidget * widget)
 			 "interior-focus", &interior_focus,
 			 "focus-line-width", &focus_width, NULL);
 
+#if GTK_CHECK_VERSION (2, 24, 0)
+    width = gdk_window_get_width(widget->window);
+    height = gdk_window_get_height(widget->window);
+#else
     gdk_drawable_get_size(widget->window, &width, &height);
+#endif
 
-    if (GTK_WIDGET_HAS_FOCUS(widget) && !interior_focus) {
+    if (gtk_widget_has_focus(widget) && !interior_focus) {
 	x += focus_width;
 	y += focus_width;
 	width -= 2 * focus_width;
@@ -1118,14 +1123,14 @@ gtk_secure_entry_draw_frame(GtkWidget * widget)
 		     GTK_STATE_NORMAL, GTK_SHADOW_IN,
 		     NULL, widget, "entry", x, y, width, height);
 
-    if (GTK_WIDGET_HAS_FOCUS(widget) && !interior_focus) {
+    if (gtk_widget_has_focus(widget) && !interior_focus) {
 	x -= focus_width;
 	y -= focus_width;
 	width += 2 * focus_width;
 	height += 2 * focus_width;
 
 	gtk_paint_focus(widget->style, widget->window,
-			GTK_WIDGET_STATE(widget), NULL, widget, "entry", 0,
+			gtk_widget_get_state(widget), NULL, widget, "entry", 0,
 			0, width, height);
     }
 }
@@ -1143,12 +1148,12 @@ gtk_secure_entry_expose(GtkWidget * widget, GdkEventExpose * event)
 	get_text_area_size(entry, NULL, NULL, &area_width, &area_height);
 
 	gtk_paint_flat_box(widget->style, entry->text_area,
-			   GTK_WIDGET_STATE(widget), GTK_SHADOW_NONE,
+			   gtk_widget_get_state(widget), GTK_SHADOW_NONE,
 			   NULL, widget, "entry_bg",
 			   0, 0, area_width, area_height);
 
 	if ((entry->invisible_char != 0) &&
-	    GTK_WIDGET_HAS_FOCUS(widget) &&
+	    gtk_widget_has_focus(widget) &&
 	    entry->selection_bound == entry->current_pos
 	    && entry->cursor_visible)
 	    gtk_secure_entry_draw_cursor(GTK_SECURE_ENTRY(widget));
@@ -1171,7 +1176,7 @@ gtk_secure_entry_button_press(GtkWidget * widget, GdkEventButton * event)
 
     entry->button = event->button;
 
-    if (!GTK_WIDGET_HAS_FOCUS(widget)) {
+    if (!gtk_widget_has_focus(widget)) {
 	entry->in_click = TRUE;
 	gtk_widget_grab_focus(widget);
 	entry->in_click = FALSE;
@@ -1248,7 +1253,11 @@ gtk_secure_entry_motion_notify(GtkWidget * widget, GdkEventMotion * event)
 
     {
 	gint height;
+#if GTK_CHECK_VERSION (2, 24, 0)
+	height = gdk_window_get_height(entry->text_area);
+#else
 	gdk_drawable_get_size(entry->text_area, NULL, &height);
+#endif
 
 	if (event->y < 0)
 	    tmp_pos = 0;
@@ -1385,7 +1394,7 @@ gtk_secure_entry_grab_focus(GtkWidget * widget)
     GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
     gboolean select_on_focus;
 
-    GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_DEFAULT);
+    gtk_widget_set_can_default(widget, TRUE);
     GTK_WIDGET_CLASS(parent_class)->grab_focus(widget);
 
     /* read current select on focus setting from GtkEntry */
@@ -1416,16 +1425,16 @@ gtk_secure_entry_state_changed(GtkWidget * widget,
 {
     GtkSecureEntry *entry = GTK_SECURE_ENTRY(widget);
 
-    if (GTK_WIDGET_REALIZED(widget)) {
+    if (gtk_widget_get_realized(widget)) {
 	gdk_window_set_background(widget->window,
 				  &widget->style->
-				  base[GTK_WIDGET_STATE(widget)]);
+				  base[gtk_widget_get_state(widget)]);
 	gdk_window_set_background(entry->text_area,
 				  &widget->style->
-				  base[GTK_WIDGET_STATE(widget)]);
+				  base[gtk_widget_get_state(widget)]);
     }
 
-    if (!GTK_WIDGET_IS_SENSITIVE(widget)) {
+    if (!gtk_widget_is_sensitive(widget)) {
 	/* Clear any selection */
 	gtk_editable_select_region(GTK_EDITABLE(entry), entry->current_pos,
 				   entry->current_pos);
@@ -1553,13 +1562,13 @@ gtk_secure_entry_style_set(GtkWidget * widget, GtkStyle * previous_style)
 
     gtk_secure_entry_recompute(entry);
 
-    if (previous_style && GTK_WIDGET_REALIZED(widget)) {
+    if (previous_style && gtk_widget_get_realized(widget)) {
 	gdk_window_set_background(widget->window,
 				  &widget->style->
-				  base[GTK_WIDGET_STATE(widget)]);
+				  base[gtk_widget_get_state(widget)]);
 	gdk_window_set_background(entry->text_area,
 				  &widget->style->
-				  base[GTK_WIDGET_STATE(widget)]);
+				  base[gtk_widget_get_state(widget)]);
     }
 }
 
@@ -2026,7 +2035,7 @@ gtk_secure_entry_real_activate(GtkSecureEntry * entry)
 		widget != window->default_widget &&
 		!(widget == window->focus_widget &&
 		  (!window->default_widget
-		   || !GTK_WIDGET_SENSITIVE(window->default_widget))))
+		   || !gtk_widget_get_sensitive(window->default_widget))))
 		gtk_window_activate_default(window);
 	}
     }
@@ -2300,7 +2309,7 @@ gtk_secure_entry_create_layout(GtkSecureEntry * entry,
 
 	pango_dir = pango_find_base_dir(entry->text, entry->n_bytes);
 	if (pango_dir == PANGO_DIRECTION_NEUTRAL) {
-	    if (GTK_WIDGET_HAS_FOCUS(widget)) {
+	    if (gtk_widget_has_focus(widget)) {
 		GdkDisplay *display = gtk_widget_get_display(widget);
 		GdkKeymap *keymap = gdk_keymap_get_for_display(display);
 		pango_dir = gdk_keymap_get_direction(keymap);
@@ -2411,7 +2420,7 @@ gtk_secure_entry_draw_text(GtkSecureEntry * entry)
     if (entry->invisible_char == 0)
 	return;
 
-    if (GTK_WIDGET_DRAWABLE(entry)) {
+    if (gtk_widget_is_drawable((GtkWidget *)entry)) {
 	PangoLayout *layout = gtk_secure_entry_ensure_layout(entry, TRUE);
 	gint x, y;
 	gint start_pos, end_pos;
@@ -2445,7 +2454,7 @@ gtk_secure_entry_draw_text(GtkSecureEntry * entry)
 
 	    pango_layout_get_extents(layout, NULL, &logical_rect);
 
-	    if (GTK_WIDGET_HAS_FOCUS(entry)) {
+	    if (gtk_widget_has_focus((GtkWidget *)entry)) {
 		selection_gc = widget->style->base_gc[GTK_STATE_SELECTED];
 		text_gc = widget->style->text_gc[GTK_STATE_SELECTED];
 	    } else {
@@ -2508,7 +2517,7 @@ gtk_secure_entry_draw_cursor(GtkSecureEntry * entry)
 				   (GTK_WIDGET(entry)));
     PangoDirection keymap_direction = gdk_keymap_get_direction(keymap);
 
-    if (GTK_WIDGET_DRAWABLE(entry)) {
+    if (gtk_widget_is_drawable((GtkWidget *)entry)) {
 	GtkWidget *widget = GTK_WIDGET(entry);
 	GdkRectangle cursor_location;
 	gboolean split_cursor;
@@ -2521,7 +2530,12 @@ gtk_secure_entry_draw_cursor(GtkSecureEntry * entry)
 	gint x1 = 0;
 	gint x2 = 0;
 
+
+#if GTK_CHECK_VERSION (2, 24, 0)
+	text_area_height = gdk_window_get_height(entry->text_area);
+#else
 	gdk_drawable_get_size(entry->text_area, NULL, &text_area_height);
+#endif
 
 	gtk_secure_entry_get_cursor_locations(entry, &strong_x, &weak_x);
 
@@ -2567,7 +2581,7 @@ gtk_secure_entry_draw_cursor(GtkSecureEntry * entry)
 static void
 gtk_secure_entry_queue_draw(GtkSecureEntry * entry)
 {
-    if (GTK_WIDGET_REALIZED(entry))
+    if (gtk_widget_get_realized((GtkWidget *)entry))
 	gdk_window_invalidate_rect(entry->text_area, NULL, FALSE);
 }
 
@@ -2656,10 +2670,14 @@ gtk_secure_entry_adjust_scroll(GtkSecureEntry * entry)
     PangoLayoutLine *line;
     PangoRectangle logical_rect;
 
-    if (!GTK_WIDGET_REALIZED(entry))
+    if (!gtk_widget_get_realized((GtkWidget *)entry))
 	return;
 
+#if GTK_CHECK_VERSION (2, 24, 0)
+    text_area_width = gdk_window_get_width(entry->text_area);
+#else
     gdk_drawable_get_size(entry->text_area, &text_area_width, NULL);
+#endif
     text_area_width -= 2 * INNER_BORDER;
 
     layout = gtk_secure_entry_ensure_layout(entry, TRUE);
@@ -3309,7 +3327,7 @@ cursor_blinks(GtkSecureEntry * entry)
     GtkSettings *settings = gtk_widget_get_settings(GTK_WIDGET(entry));
     gboolean blink;
 
-    if (GTK_WIDGET_HAS_FOCUS(entry) &&
+    if (gtk_widget_has_focus((GtkWidget *)entry) &&
 	entry->selection_bound == entry->current_pos) {
 	g_object_get(settings, "gtk-cursor-blink", &blink, NULL);
 	return blink;
@@ -3334,7 +3352,7 @@ show_cursor(GtkSecureEntry * entry)
     if (!entry->cursor_visible) {
 	entry->cursor_visible = TRUE;
 
-	if (GTK_WIDGET_HAS_FOCUS(entry)
+	if (gtk_widget_has_focus((GtkWidget *)entry)
 	    && entry->selection_bound == entry->current_pos)
 	    gtk_widget_queue_draw(GTK_WIDGET(entry));
     }
@@ -3346,7 +3364,7 @@ hide_cursor(GtkSecureEntry * entry)
     if (entry->cursor_visible) {
 	entry->cursor_visible = FALSE;
 
-	if (GTK_WIDGET_HAS_FOCUS(entry)
+	if (gtk_widget_has_focus((GtkWidget *)entry)
 	    && entry->selection_bound == entry->current_pos)
 	    gtk_widget_queue_draw(GTK_WIDGET(entry));
     }
@@ -3364,14 +3382,14 @@ blink_cb(gpointer data)
 
     entry = GTK_SECURE_ENTRY(data);
 
-    if (!GTK_WIDGET_HAS_FOCUS(entry)) {
+    if (!gtk_widget_has_focus((GtkWidget *)entry)) {
 	g_warning
 	    ("GtkSecureEntry - did not receive focus-out-event. If you\n"
 	     "connect a handler to this signal, it must return\n"
 	     "FALSE so the entry gets the event as well");
     }
 
-    g_assert(GTK_WIDGET_HAS_FOCUS(entry));
+    g_assert(gtk_widget_has_focus((GtkWidget *)entry));
     g_assert(entry->selection_bound == entry->current_pos);
 
     if (entry->cursor_visible) {
diff --git a/gtk+-2/pinentry-gtk-2.c b/gtk+-2/pinentry-gtk-2.c
index 1a8c083..235bd99 100644
--- a/gtk+-2/pinentry-gtk-2.c
+++ b/gtk+-2/pinentry-gtk-2.c
@@ -65,7 +65,9 @@ static GtkWidget *qualitybar;
 static GtkWidget *insure;
 static GtkWidget *time_out;
 #endif
+#if !GTK_CHECK_VERSION (2, 12, 0)
 static GtkTooltips *tooltips;
+#endif
 static gboolean got_input;
 
 /* Gnome hig small and large space in pixels.  */
@@ -127,7 +129,7 @@ make_transient (GtkWidget *win, GdkEvent *event, gpointer data)
   /* Make window transient for the root window.  */
   screen = gdk_screen_get_default ();
   root = gdk_screen_get_root_window (screen);
-  gdk_window_set_transient_for (win->window, root);
+  gdk_window_set_transient_for (gtk_widget_get_window(win), root);
 }
 
 
@@ -138,7 +140,7 @@ grab_keyboard (GtkWidget *win, GdkEvent *event, gpointer data)
   if (! pinentry->grab)
     return FALSE;
 
-  if (gdk_keyboard_grab (win->window, FALSE, gdk_event_get_time (event)))
+  if (gdk_keyboard_grab (gtk_widget_get_window(win), FALSE, gdk_event_get_time (event)))
     {
       g_critical ("could not grab keyboard");
       grab_failed = 1;
@@ -157,7 +159,7 @@ ungrab_keyboard (GtkWidget *win, GdkEvent *event, gpointer data)
   /* gdk_window_set_transient_for cannot be used with parent = NULL to
      unset transient hint (unlike gtk_ version which can).  Replacement
      code is taken from gtk_window_transient_parent_unrealized.  */
-  gdk_property_delete (win->window,
+  gdk_property_delete (gtk_widget_get_window(win),
                        gdk_atom_intern_static_string ("WM_TRANSIENT_FOR"));
   return FALSE;
 }
@@ -330,7 +332,9 @@ create_window (int confirm_mode)
   GtkAccelGroup *acc;
   gchar *msg;
 
+#if !GTK_CHECK_VERSION (2, 12, 0)
   tooltips = gtk_tooltips_new ();
+#endif
 
   /* FIXME: check the grabbing code against the one we used with the
      old gpg-agent */
@@ -471,8 +475,12 @@ create_window (int confirm_mode)
 				     QUALITYBAR_EMPTY_TEXT);
 	  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (qualitybar), 0.0);
           if (pinentry->quality_bar_tt)
+#if !GTK_CHECK_VERSION (2, 12, 0)
             gtk_tooltips_set_tip (GTK_TOOLTIPS (tooltips), qualitybar,
                                   pinentry->quality_bar_tt, "");
+#else
+	    gtk_widget_set_tooltip_text (qualitybar, pinentry->quality_bar_tt);
+#endif
 	  gtk_table_attach (GTK_TABLE (table), qualitybar, 1, 2, nrow, nrow+1,
 	  		    GTK_EXPAND|GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0);
           nrow++;
@@ -561,7 +569,7 @@ create_window (int confirm_mode)
                         G_CALLBACK (confirm_mode ? confirm_button_clicked
                                     : button_clicked),
 			(gpointer) CONFIRM_CANCEL);
-      GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
+      gtk_widget_set_can_default (w, TRUE);
     }
 
   if (confirm_mode && !pinentry->one_button && pinentry->notok)
@@ -574,7 +582,7 @@ create_window (int confirm_mode)
       g_signal_connect (G_OBJECT (w), "clicked",
                         G_CALLBACK (confirm_button_clicked),
 			(gpointer) CONFIRM_NOTOK);
-      GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
+      gtk_widget_set_can_default (w, TRUE);
     }
 
   if (pinentry->ok)
@@ -602,7 +610,7 @@ create_window (int confirm_mode)
     {
       g_signal_connect (G_OBJECT (w), "clicked",
 			G_CALLBACK (button_clicked), "ok");
-      GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
+      gtk_widget_set_can_default (w, TRUE);
       gtk_widget_grab_default (w);
       g_signal_connect_object (G_OBJECT (entry), "focus_in_event",
 				G_CALLBACK (gtk_widget_grab_default),
@@ -613,7 +621,7 @@ create_window (int confirm_mode)
       g_signal_connect (G_OBJECT (w), "clicked",
 			G_CALLBACK(confirm_button_clicked),
 			(gpointer) CONFIRM_OK);
-      GTK_WIDGET_SET_FLAGS (w, GTK_CAN_DEFAULT);
+      gtk_widget_set_can_default (w, TRUE);
     }
 
   gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
-- 
2.1.0




More information about the Gnupg-devel mailing list