Wireshark-dev: Re: [Wireshark-dev] Custom widget for packet bytes
From: Jakub Zawadzki <darkjames-ws@xxxxxxxxxxxx>
Date: Mon, 16 Jul 2012 12:35:00 +0200
On Fri, Jun 15, 2012 at 11:22:13PM +0200, Jakub Zawadzki wrote: > I'm in the process of writting custom widget for packet bytes (hex/bits). > [...] > > I'll prepare patch for testing to make sure it works properly on most common systems :) FYI, commited in r43728. It was only tested on Nac and Linux. If you find any weirdness, please report ;-) In r43745 it *finally* compiles on gtk-3.0. If you don't see scrollbars please check attached patch.
diff --git ui/gtk/bytes_view.c ui/gtk/bytes_view.c
index cefe5ac..a694b6a 100644
--- ui/gtk/bytes_view.c
+++ ui/gtk/bytes_view.c
@@ -64,9 +64,13 @@ struct _BytesView
int font_descent;
int fontsize;
- gint adj_tag;
GtkAdjustment *vadj;
GtkAdjustment *hadj;
+#if GTK_CHECK_VERSION(3, 0, 0)
+ guint hscroll_policy : 1;
+ guint vscroll_policy : 1;
+#endif
+ gint adj_tag;
int max_width;
gboolean bold_highlight;
@@ -1001,6 +1005,74 @@ bytes_view_set_scroll_adjustments(BytesView *bv, GtkAdjustment *hadj, GtkAdjustm
bytes_view_adjustment_set(bv);
}
+#if GTK_CHECK_VERSION(3, 0, 0)
+enum {
+ PROP_0,
+ PROP_HADJUSTMENT,
+ PROP_VADJUSTMENT,
+ PROP_HSCROLL_POLICY,
+ PROP_VSCROLL_POLICY
+};
+
+static void
+bytes_view_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ BytesView *bv = BYTES_VIEW(object);
+
+ switch (prop_id) {
+ case PROP_HADJUSTMENT:
+ bytes_view_set_scroll_adjustments(bv, g_value_get_object(value), bv->vadj);
+ break;
+
+ case PROP_VADJUSTMENT:
+ bytes_view_set_scroll_adjustments(bv, bv->hadj, g_value_get_object(value));
+ break;
+
+ case PROP_HSCROLL_POLICY:
+ bv->hscroll_policy = g_value_get_enum(value);
+ gtk_widget_queue_resize(GTK_WIDGET(bv));
+ break;
+
+ case PROP_VSCROLL_POLICY:
+ bv->vscroll_policy = g_value_get_enum(value);
+ gtk_widget_queue_resize(GTK_WIDGET(bv));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+bytes_view_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ BytesView *bv = BYTES_VIEW(object);
+
+ switch (prop_id) {
+ case PROP_HADJUSTMENT:
+ g_value_set_object(value, bv->hadj);
+ break;
+
+ case PROP_VADJUSTMENT:
+ g_value_set_object(value, bv->vadj);
+ break;
+
+ case PROP_HSCROLL_POLICY:
+ g_value_set_enum(value, bv->hscroll_policy);
+ break;
+
+ case PROP_VSCROLL_POLICY:
+ g_value_set_enum(value, bv->vscroll_policy);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+#endif
+
static void
bytes_view_class_init(BytesViewClass *klass)
{
@@ -1040,10 +1112,20 @@ bytes_view_class_init(BytesViewClass *klass)
widget_class->scroll_event = bytes_view_scroll;
#if GTK_CHECK_VERSION(3, 0, 0)
- /* XXX, http://developer.gnome.org/gtk3/stable/GtkScrollable.html
- *
- * connect to hadjustment/vadjustment properties?
- */
+ {
+ GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
+
+ gobject_class->set_property = bytes_view_set_property;
+ gobject_class->get_property = bytes_view_get_property;
+
+ /* XXX, move some code from widget->destroy to gobject->finalize? */
+ /* gobject_class->finalize = bytes_view_finalize; */
+
+ g_object_class_override_property(gobject_class, PROP_HADJUSTMENT, "hadjustment");
+ g_object_class_override_property(gobject_class, PROP_VADJUSTMENT, "vadjustment");
+ g_object_class_override_property(gobject_class, PROP_HSCROLL_POLICY, "hscroll-policy");
+ g_object_class_override_property(gobject_class, PROP_VSCROLL_POLICY, "vscroll-policy");
+ }
#else
klass->set_scroll_adjustments = bytes_view_set_scroll_adjustments;
- Prev by Date: Re: [Wireshark-dev] RFD: New language to write dissectors
- Next by Date: [Wireshark-dev] MSRPC dissector -- About DCOM:RemoteCreateInstance Request/Response decoder
- Previous by thread: Re: [Wireshark-dev] GTK3 problems
- Next by thread: [Wireshark-dev] MSRPC dissector -- About DCOM:RemoteCreateInstance Request/Response decoder
- Index(es):