diff options
Diffstat (limited to 'libwnck/pager.c')
-rw-r--r-- | libwnck/pager.c | 106 |
1 files changed, 102 insertions, 4 deletions
diff --git a/libwnck/pager.c b/libwnck/pager.c index 8561546..4df766c 100644 --- a/libwnck/pager.c +++ b/libwnck/pager.c @@ -91,6 +91,17 @@ struct _WnckPagerPrivate guint dnd_time; /* time of last event during dnd (for delayed workspace activation) */ }; +enum +{ + PROP_0, + + PROP_HANDLE, + + LAST_PROP +}; + +static GParamSpec *pager_properties[LAST_PROP] = { NULL }; + G_DEFINE_TYPE_WITH_PRIVATE (WnckPager, wnck_pager, GTK_TYPE_WIDGET); enum @@ -235,12 +246,75 @@ wnck_pager_init (WnckPager *pager) } static void +wnck_pager_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + WnckPager *self; + + self = WNCK_PAGER (object); + + switch (property_id) + { + case PROP_HANDLE: + g_value_set_object (value, self->priv->handle); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +wnck_pager_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + WnckPager *self; + + self = WNCK_PAGER (object); + + switch (property_id) + { + case PROP_HANDLE: + g_assert (self->priv->handle == NULL); + self->priv->handle = g_value_dup_object (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +install_properties (GObjectClass *object_class) +{ + pager_properties[PROP_HANDLE] = + g_param_spec_object ("handle", + "handle", + "handle", + WNCK_TYPE_HANDLE, + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE | + G_PARAM_EXPLICIT_NOTIFY | + G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, LAST_PROP, pager_properties); +} + +static void wnck_pager_class_init (WnckPagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); object_class->finalize = wnck_pager_finalize; + object_class->get_property = wnck_pager_get_property; + object_class->set_property = wnck_pager_set_property; widget_class->realize = wnck_pager_realize; widget_class->unrealize = wnck_pager_unrealize; @@ -264,6 +338,8 @@ wnck_pager_class_init (WnckPagerClass *klass) widget_class->drag_end = wnck_pager_drag_end; widget_class->query_tooltip = wnck_pager_query_tooltip; + install_properties (object_class); + gtk_widget_class_set_css_name (widget_class, "wnck-pager"); } @@ -303,8 +379,8 @@ _wnck_pager_set_screen (WnckPager *pager) gdkscreen = gtk_widget_get_screen (GTK_WIDGET (pager)); screen_number = gdk_x11_screen_get_screen_number (gdkscreen); - pager->priv->screen = _wnck_handle_get_screen (pager->priv->handle, - screen_number); + pager->priv->screen = wnck_handle_get_screen (pager->priv->handle, + screen_number); if (!wnck_pager_set_layout_hint (pager)) { @@ -2201,12 +2277,34 @@ wnck_pager_new (void) { WnckPager *pager; - pager = g_object_new (WNCK_TYPE_PAGER, NULL); - pager->priv->handle = g_object_ref (_wnck_get_handle ()); + pager = g_object_new (WNCK_TYPE_PAGER, + "handle", _wnck_get_handle (), + NULL); return GTK_WIDGET (pager); } +/** + * wnck_pager_new_with_handle: + * @handle: a #WnckHandle + * + * Creates a new #WnckPager. The #WnckPager will show the #WnckWorkspace of the + * #WnckScreen it is on. + * + * Returns: a newly created #WnckPager. + */ +GtkWidget * +wnck_pager_new_with_handle (WnckHandle *handle) +{ + WnckPager *self; + + self = g_object_new (WNCK_TYPE_PAGER, + "handle", handle, + NULL); + + return GTK_WIDGET (self); +} + static gboolean wnck_pager_set_layout_hint (WnckPager *pager) { |