From f70759b6c1a61e34660a3bc2dddfb3f2cbf18fe7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Dec 2009 16:04:29 -0600 Subject: Building the basic generic menu item. --- libdbusmenu-gtk/genericmenuitem.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 libdbusmenu-gtk/genericmenuitem.h (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h new file mode 100644 index 0000000..fdfbee1 --- /dev/null +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -0,0 +1,34 @@ +#ifndef __GENERICMENUITEM_H__ +#define __GENERICMENUITEM_H__ + +#include +#include +#include + +G_BEGIN_DECLS + +#define GENERICMENUITEM_TYPE (genericmenuitem_get_type ()) +#define GENERICMENUITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GENERICMENUITEM_TYPE, Genericmenuitem)) +#define GENERICMENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GENERICMENUITEM_TYPE, GenericmenuitemClass)) +#define IS_GENERICMENUITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GENERICMENUITEM_TYPE)) +#define IS_GENERICMENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GENERICMENUITEM_TYPE)) +#define GENERICMENUITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GENERICMENUITEM_TYPE, GenericmenuitemClass)) + +typedef struct _Genericmenuitem Genericmenuitem; +typedef struct _GenericmenuitemClass GenericmenuitemClass; + +struct _GenericmenuitemClass +{ +GtkCheckMenuItemClass parent_class; +}; + +struct _Genericmenuitem +{ +GtkCheckMenuItem parent; +}; + +GType genericmenuitem_get_type (void); + +G_END_DECLS + +#endif -- cgit v1.2.3 From eda482ed8bee77ed0904f1b1f3e835b49e174c5b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Dec 2009 16:26:08 -0600 Subject: Slight cleanups, getting this code going. --- libdbusmenu-gtk/genericmenuitem.c | 39 +++++++++++++++++++++++++++++---------- libdbusmenu-gtk/genericmenuitem.h | 26 +++++++++++++++++--------- 2 files changed, 46 insertions(+), 19 deletions(-) (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 3dd3969..1d59d34 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -4,10 +4,9 @@ #include "genericmenuitem.h" -typedef struct _GenericmenuitemPrivate GenericmenuitemPrivate; - -struct _GenericmenuitemPrivate -{ +struct _GenericmenuitemPrivate { + int checkbox_type; + int state; }; #define GENERICMENUITEM_GET_PRIVATE(o) \ @@ -20,30 +19,50 @@ static void genericmenuitem_finalize (GObject *object); G_DEFINE_TYPE (Genericmenuitem, genericmenuitem, GTK_TYPE_CHECK_MENU_ITEM); +/* Initializing all of the classes. Most notably we're + disabling the drawing of the check early. */ static void genericmenuitem_class_init (GenericmenuitemClass *klass) { -GObjectClass *object_class = G_OBJECT_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GenericmenuitemPrivate)); + + object_class->dispose = genericmenuitem_dispose; + object_class->finalize = genericmenuitem_finalize; -g_type_class_add_private (klass, sizeof (GenericmenuitemPrivate)); + GtkCheckMenuItemClass * check_class = GTK_CHECK_MENU_ITEM_CLASS (klass); -object_class->dispose = genericmenuitem_dispose; -object_class->finalize = genericmenuitem_finalize; + /* We'll put this back if we get a type set */ + check_class->draw_indicator = NULL; + + return; } +/* Sets default values for all the class variables. Mostly, + this puts us in a default state. */ static void genericmenuitem_init (Genericmenuitem *self) { + self->priv = GENERICMENUITEM_GET_PRIVATE(self); + + return; } +/* Clean everything up. Whew, that can be work. */ static void genericmenuitem_dispose (GObject *object) { -G_OBJECT_CLASS (genericmenuitem_parent_class)->dispose (object); + + G_OBJECT_CLASS (genericmenuitem_parent_class)->dispose (object); + return; } +/* Now free memory, we no longer need it. */ static void genericmenuitem_finalize (GObject *object) { -G_OBJECT_CLASS (genericmenuitem_parent_class)->finalize (object); + + G_OBJECT_CLASS (genericmenuitem_parent_class)->finalize (object); + return; } diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h index fdfbee1..8a19282 100644 --- a/libdbusmenu-gtk/genericmenuitem.h +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -14,17 +14,25 @@ G_BEGIN_DECLS #define IS_GENERICMENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GENERICMENUITEM_TYPE)) #define GENERICMENUITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GENERICMENUITEM_TYPE, GenericmenuitemClass)) -typedef struct _Genericmenuitem Genericmenuitem; -typedef struct _GenericmenuitemClass GenericmenuitemClass; - -struct _GenericmenuitemClass -{ -GtkCheckMenuItemClass parent_class; +typedef struct _Genericmenuitem Genericmenuitem; +typedef struct _GenericmenuitemClass GenericmenuitemClass; +typedef struct _GenericmenuitemPrivate GenericmenuitemPrivate; + +/** + GenericmenuitemClass: + @parent_class: Our parent #GtkCheckMenuItemClass +*/ +struct _GenericmenuitemClass { + GtkCheckMenuItemClass parent_class; }; -struct _Genericmenuitem -{ -GtkCheckMenuItem parent; +/** + Genericmenuitem: + @parent: Our parent #GtkCheckMenuItem +*/ +struct _Genericmenuitem { + GtkCheckMenuItem parent; + GenericmenuitemPrivate * priv; }; GType genericmenuitem_get_type (void); -- cgit v1.2.3 From fcb8ac056eceee3ac25f28812cd9090177d91463 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Dec 2009 16:37:12 -0600 Subject: Setting up enums for the type of check and the state of it. --- libdbusmenu-gtk/genericmenuitem.c | 7 +++++-- libdbusmenu-gtk/genericmenuitem.h | 20 +++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 1d59d34..ee02a1c 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -5,8 +5,8 @@ #include "genericmenuitem.h" struct _GenericmenuitemPrivate { - int checkbox_type; - int state; + GenericmenuitemCheckType check_type; + GenericmenuitemState state; }; #define GENERICMENUITEM_GET_PRIVATE(o) \ @@ -46,6 +46,9 @@ genericmenuitem_init (Genericmenuitem *self) { self->priv = GENERICMENUITEM_GET_PRIVATE(self); + self->priv->check_type = GENERICMENUITEM_CHECK_TYPE_NONE; + self->priv->state = GENERICMENUITEM_STATE_UNCHECKED; + return; } diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h index 8a19282..b735fe4 100644 --- a/libdbusmenu-gtk/genericmenuitem.h +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -14,9 +14,11 @@ G_BEGIN_DECLS #define IS_GENERICMENUITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GENERICMENUITEM_TYPE)) #define GENERICMENUITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GENERICMENUITEM_TYPE, GenericmenuitemClass)) -typedef struct _Genericmenuitem Genericmenuitem; -typedef struct _GenericmenuitemClass GenericmenuitemClass; -typedef struct _GenericmenuitemPrivate GenericmenuitemPrivate; +typedef struct _Genericmenuitem Genericmenuitem; +typedef struct _GenericmenuitemClass GenericmenuitemClass; +typedef struct _GenericmenuitemPrivate GenericmenuitemPrivate; +typedef enum _GenericmenuitemCheckType GenericmenuitemCheckType; +typedef enum _GenericmenuitemState GenericmenuitemState; /** GenericmenuitemClass: @@ -35,6 +37,18 @@ struct _Genericmenuitem { GenericmenuitemPrivate * priv; }; +enum _GenericmenuitemCheckType { + GENERICMENUITEM_CHECK_TYPE_NONE, + GENERICMENUITEM_CHECK_TYPE_CHECKBOX, + GENErICMENUITEM_CHECK_TYPE_RADIO +}; + +enum _GenericmenuitemState { + GENERICMENUITEM_STATE_UNCHECKED, + GENERICMENUITEM_STATE_CHECKED, + GENERICMENUITEM_STATE_INDETERMINATE +}; + GType genericmenuitem_get_type (void); G_END_DECLS -- cgit v1.2.3 From f54a417fde8f6937ecafd269db51a135af2e7a3e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Dec 2009 17:09:16 -0600 Subject: Functions for setting the check type and state of the check. --- libdbusmenu-gtk/genericmenuitem.c | 45 +++++++++++++++++++++++++++++++++++++++ libdbusmenu-gtk/genericmenuitem.h | 6 +++++- 2 files changed, 50 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index b40a3f5..6eee2f7 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -94,3 +94,48 @@ draw_indicator (GtkCheckMenuItem *check_menu_item, GdkRectangle *area) } return; } + +/** + genericmenuitem_set_check_type: + @item: #Genericmenuitem to set the type on + @check_type: Which type of check should be displayed + + This function changes the type of the checkmark that + appears in the left hand gutter for the menuitem. +*/ +void +genericmenuitem_set_check_type (Genericmenuitem * item, GenericmenuitemCheckType check_type) +{ + if (item->priv->check_type == check_type) { + return; + } + + item->priv->check_type = check_type; + + gtk_widget_queue_draw(GTK_WIDGET(item)); + + return; +} + +/** + genericmenuitem_set_state: + @item: #Genericmenuitem to set the type on + @check_type: What is the state of the check + + Sets the state of the check in the menu item. It does + not require, but isn't really useful if the type of + check that the menuitem is set to #GENERICMENUITEM_CHECK_TYPE_NONE. +*/ +void +genericmenuitem_set_state (Genericmenuitem * item, GenericmenuitemState state) +{ + if (item->priv->state == state) { + return; + } + + item->priv->state = state; + + gtk_widget_queue_draw(GTK_WIDGET(item)); + + return; +} diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h index b735fe4..8586590 100644 --- a/libdbusmenu-gtk/genericmenuitem.h +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -49,7 +49,11 @@ enum _GenericmenuitemState { GENERICMENUITEM_STATE_INDETERMINATE }; -GType genericmenuitem_get_type (void); +GType genericmenuitem_get_type (void); +void genericmenuitem_set_check_type (Genericmenuitem * item, + GenericmenuitemCheckType check_type); +void genericmenuitem_set_state (Genericmenuitem * item, + GenericmenuitemState state); G_END_DECLS -- cgit v1.2.3 From 16812b7ca72e41dfaf76b14d5517739f44e815b7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Dec 2009 17:12:32 -0600 Subject: Building up the case statements. --- libdbusmenu-gtk/genericmenuitem.c | 24 ++++++++++++++++++++++++ libdbusmenu-gtk/genericmenuitem.h | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 6eee2f7..3f36bbf 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -112,6 +112,18 @@ genericmenuitem_set_check_type (Genericmenuitem * item, GenericmenuitemCheckType item->priv->check_type = check_type; + switch (item->priv->check_type) { + case GENERICMENUITEM_CHECK_TYPE_NONE: + break; + case GENERICMENUITEM_CHECK_TYPE_CHECKBOX: + break; + case GENERICMENUITEM_CHECK_TYPE_RADIO: + break; + default: + g_warning("Generic Menuitem invalid check type: %d", check_type); + return; + } + gtk_widget_queue_draw(GTK_WIDGET(item)); return; @@ -135,6 +147,18 @@ genericmenuitem_set_state (Genericmenuitem * item, GenericmenuitemState state) item->priv->state = state; + switch (item->priv->state) { + case GENERICMENUITEM_STATE_UNCHECKED: + break; + case GENERICMENUITEM_STATE_CHECKED: + break; + case GENERICMENUITEM_STATE_INDETERMINATE: + break; + default: + g_warning("Generic Menuitem invalid check state: %d", state); + return; + } + gtk_widget_queue_draw(GTK_WIDGET(item)); return; diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h index 8586590..4f54924 100644 --- a/libdbusmenu-gtk/genericmenuitem.h +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -40,7 +40,7 @@ struct _Genericmenuitem { enum _GenericmenuitemCheckType { GENERICMENUITEM_CHECK_TYPE_NONE, GENERICMENUITEM_CHECK_TYPE_CHECKBOX, - GENErICMENUITEM_CHECK_TYPE_RADIO + GENERICMENUITEM_CHECK_TYPE_RADIO }; enum _GenericmenuitemState { -- cgit v1.2.3 From 58c6ed7efa57ff15c27cee2fc07b4b31a48b734b Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 16 Dec 2009 13:09:32 -0600 Subject: Stubs for setting and getting the image and label. --- libdbusmenu-gtk/genericmenuitem.c | 39 +++++++++++++++++++++++++++++++++++++++ libdbusmenu-gtk/genericmenuitem.h | 3 +++ 2 files changed, 42 insertions(+) (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index d8e9b39..20fb8e2 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -24,6 +24,8 @@ static void genericmenuitem_init (Genericmenuitem *self); static void genericmenuitem_dispose (GObject *object); static void genericmenuitem_finalize (GObject *object); static void draw_indicator (GtkCheckMenuItem *check_menu_item, GdkRectangle *area); +static void set_label (GtkMenuItem * menu_item, const gchar * label); +static const gchar * get_label (GtkMenuItem * menu_item); /* GObject stuff */ G_DEFINE_TYPE (Genericmenuitem, genericmenuitem, GTK_TYPE_CHECK_MENU_ITEM); @@ -48,6 +50,10 @@ genericmenuitem_class_init (GenericmenuitemClass *klass) parent_draw_indicator = check_class->draw_indicator; check_class->draw_indicator = draw_indicator; + GtkMenuItemClass * menuitem_class = GTK_MENU_ITEM_CLASS (klass); + menuitem_class->set_label = set_label; + menuitem_class->get_label = get_label; + return; } @@ -95,6 +101,23 @@ draw_indicator (GtkCheckMenuItem *check_menu_item, GdkRectangle *area) return; } +/* Set the label on the item */ +static void +set_label (GtkMenuItem * menu_item, const gchar * label) +{ + + return; +} + +/* Get the text of the label for the item */ +static const gchar * +get_label (GtkMenuItem * menu_item) +{ + + + return NULL; +} + /** genericmenuitem_set_check_type: @item: #Genericmenuitem to set the type on @@ -187,3 +210,19 @@ genericmenuitem_set_state (Genericmenuitem * item, GenericmenuitemState state) return; } + +void +genericmenuitem_set_image (Genericmenuitem * item, GtkWidget * image) +{ + + + return; +} + +GtkWidget * +genericmenuitem_get_image (Genericmenuitem * item) +{ + + + return NULL; +} diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h index 4f54924..eaccee8 100644 --- a/libdbusmenu-gtk/genericmenuitem.h +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -54,6 +54,9 @@ void genericmenuitem_set_check_type (Genericmenuitem * item, GenericmenuitemCheckType check_type); void genericmenuitem_set_state (Genericmenuitem * item, GenericmenuitemState state); +void genericmenuitem_set_image (Genericmenuitem * item, + GtkWidget * image); +GtkWidget * genericmenuitem_get_image (Genericmenuitem * item); G_END_DECLS -- cgit v1.2.3 From ab52deb8a0b8fe4dd2fb602cb32beafac4d5dae0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 16 Dec 2009 13:11:08 -0600 Subject: Stupid formating changes. --- libdbusmenu-gtk/genericmenuitem.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h index eaccee8..6c494e8 100644 --- a/libdbusmenu-gtk/genericmenuitem.h +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -49,14 +49,14 @@ enum _GenericmenuitemState { GENERICMENUITEM_STATE_INDETERMINATE }; -GType genericmenuitem_get_type (void); -void genericmenuitem_set_check_type (Genericmenuitem * item, - GenericmenuitemCheckType check_type); -void genericmenuitem_set_state (Genericmenuitem * item, - GenericmenuitemState state); -void genericmenuitem_set_image (Genericmenuitem * item, - GtkWidget * image); -GtkWidget * genericmenuitem_get_image (Genericmenuitem * item); +GType genericmenuitem_get_type (void); +void genericmenuitem_set_check_type (Genericmenuitem * item, + GenericmenuitemCheckType check_type); +void genericmenuitem_set_state (Genericmenuitem * item, + GenericmenuitemState state); +void genericmenuitem_set_image (Genericmenuitem * item, + GtkWidget * image); +GtkWidget * genericmenuitem_get_image (Genericmenuitem * item); G_END_DECLS -- cgit v1.2.3 From 339b68e8b1a816a9ee5d44fea3a98e0492c65885 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 17 Dec 2009 14:25:32 -0600 Subject: License headers. I hate these. --- libdbusmenu-gtk/genericmenuitem.c | 28 ++++++++++++++++++++++++++++ libdbusmenu-gtk/genericmenuitem.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) (limited to 'libdbusmenu-gtk/genericmenuitem.h') diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 09d5004..aff14ef 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -1,3 +1,31 @@ +/* +A menuitem subclass that has the ability to do lots of different +things depending on it's settings. + +Copyright 2009 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/libdbusmenu-gtk/genericmenuitem.h b/libdbusmenu-gtk/genericmenuitem.h index 6c494e8..3c4af0c 100644 --- a/libdbusmenu-gtk/genericmenuitem.h +++ b/libdbusmenu-gtk/genericmenuitem.h @@ -1,3 +1,31 @@ +/* +A menuitem subclass that has the ability to do lots of different +things depending on it's settings. + +Copyright 2009 Canonical Ltd. + +Authors: + Ted Gould + +This program is free software: you can redistribute it and/or modify it +under the terms of either or both of the following licenses: + +1) the GNU Lesser General Public License version 3, as published by the +Free Software Foundation; and/or +2) the GNU Lesser General Public License version 2.1, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranties of +MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR +PURPOSE. See the applicable version of the GNU Lesser General Public +License for more details. + +You should have received a copy of both the GNU Lesser General Public +License version 3 and version 2.1 along with this program. If not, see + +*/ + #ifndef __GENERICMENUITEM_H__ #define __GENERICMENUITEM_H__ -- cgit v1.2.3