#include "putty.h"
#include "gtkcompat.h"
+void get_label_text_dimensions(const char *text, int *width, int *height)
+{
+ /*
+ * Determine the dimensions of a piece of text in the standard
+ * font used in GTK interface elements like labels. We do this by
+ * instantiating an actual GtkLabel, and then querying its size.
+ *
+ * But GTK2 and GTK3 require us to query the size completely
+ * differently. I'm sure there ought to be an easier approach than
+ * the way I'm doing this in GTK3, too!
+ */
+ GtkWidget *label = gtk_label_new(text);
+
+#if GTK_CHECK_VERSION(3,0,0)
+ PangoLayout *layout = gtk_label_get_layout(GTK_LABEL(label));
+ PangoRectangle logrect;
+ pango_layout_get_extents(layout, NULL, &logrect);
+ if (width)
+ *width = logrect.width / PANGO_SCALE;
+ if (height)
+ *height = logrect.height / PANGO_SCALE;
+#else
+ GtkRequisition req;
+ gtk_widget_size_request(label, &req);
+ if (width)
+ *width = req.width;
+ if (height)
+ *height = req.height;
+#endif
+
+ g_object_ref_sink(G_OBJECT(label));
+#if GTK_CHECK_VERSION(2,10,0)
+ g_object_unref(label);
+#endif
+}
+
+int string_width(const char *text)
+{
+ int ret;
+ get_label_text_dimensions(text, &ret, NULL);
+ return ret;
+}
+
+void align_label_left(GtkLabel *label)
+{
+#if GTK_CHECK_VERSION(3,16,0)
+ gtk_label_set_xalign(label, 0.0);
+#else
+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
+#endif
+}
+
/* ----------------------------------------------------------------------
* Functions to arrange controls in a basically dialog-like window.
*
/* GtkWindow is a GtkBin, hence contains exactly one child, which
* here we always expect to be a vbox */
GtkBox *vbox = GTK_BOX(gtk_bin_get_child(GTK_BIN(dlg)));
-
- GtkWidget *sep = gtk_hseparator_new();
- gtk_box_pack_end(vbox, sep, FALSE, TRUE, 0);
- gtk_widget_show(sep);
+ GtkWidget *sep;
g_object_set(G_OBJECT(w), "margin", 8, (const char *)NULL);
gtk_box_pack_end(vbox, w, FALSE, TRUE, 0);
+ sep = gtk_hseparator_new();
+ gtk_box_pack_end(vbox, sep, FALSE, TRUE, 0);
+ gtk_widget_show(sep);
+
#endif
}