aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am21
-rw-r--r--src/idocalendarmenuitem.c32
-rw-r--r--src/idoentrymenuitem.c28
-rw-r--r--src/idomessagedialog.c24
-rw-r--r--src/idorange.c33
-rw-r--r--src/idorange.h2
-rw-r--r--src/idoscalemenuitem.c32
-rw-r--r--src/idoswitchmenuitem.c120
-rw-r--r--src/idoswitchmenuitem.h57
9 files changed, 192 insertions, 157 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 6180422..017874f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,10 +1,5 @@
-if USE_GTK3
VER=3
lib_LTLIBRARIES = libido3-0.1.la
-else
-VER=
-lib_LTLIBRARIES = libido-0.1.la
-endif
ido_built_public_sources = \
idotypebuiltins.h
@@ -19,6 +14,7 @@ sources_h = \
idomessagedialog.h \
idorange.h \
idoscalemenuitem.h \
+ idoswitchmenuitem.h \
idotimeline.h \
libido.h
@@ -57,6 +53,9 @@ AM_CPPFLAGS = \
$(MAINTAINER_CFLAGS) \
-Wall -Werror -Wextra -Wno-unused-parameter
+AM_CFLAGS = \
+ $(COVERAGE_CFLAGS)
+
libido_0_1_la_SOURCES = \
idotypebuiltins.c \
idocalendarmenuitem.c \
@@ -64,6 +63,7 @@ libido_0_1_la_SOURCES = \
idomessagedialog.c \
idorange.c \
idoscalemenuitem.c \
+ idoswitchmenuitem.c \
idotimeline.c
libido3_0_1_la_SOURCES = $(libido_0_1_la_SOURCES)
@@ -76,13 +76,18 @@ libidoinclude_HEADERS = \
idomessagedialog.h \
idorange.h \
idoscalemenuitem.h \
+ idoswitchmenuitem.h \
idotimeline.h \
libido.h
-libido_0_1_la_LIBADD = $(GTK_LIBS)
-libido_0_1_la_LDFLAGS = $(GTK_LT_LDFLAGS)
+libido_0_1_la_LIBADD = $(GTK_LIBS) $(LIBM)
+libido_0_1_la_LDFLAGS = \
+ $(GTK_LT_LDFLAGS) \
+ $(COVERAGE_LDFLAGS)
libido3_0_1_la_LIBADD = $(libido_0_1_la_LIBADD)
-libido3_0_1_la_LDFLAGS = $(libido_0_1_la_LDFLAGS)
+libido3_0_1_la_LDFLAGS = \
+ $(libido_0_1_la_LDFLAGS) \
+ $(COVERAGE_LDFLAGS)
DISTCLEANFILES = \
stamp-idotypebuiltins.h \
diff --git a/src/idocalendarmenuitem.c b/src/idocalendarmenuitem.c
index da7c436..84bee80 100644
--- a/src/idocalendarmenuitem.c
+++ b/src/idocalendarmenuitem.c
@@ -27,13 +27,8 @@
#include "idocalendarmenuitem.h"
#include "config.h"
-#if GTK_CHECK_VERSION (3, 0, 0)
static void ido_calendar_menu_item_select (GtkMenuItem *item);
static void ido_calendar_menu_item_deselect (GtkMenuItem *item);
-#else
-static void ido_calendar_menu_item_select (GtkItem *item);
-static void ido_calendar_menu_item_deselect (GtkItem *item);
-#endif
static gboolean ido_calendar_menu_item_button_release (GtkWidget *widget,
GdkEventButton *event);
static gboolean ido_calendar_menu_item_button_press (GtkWidget *widget,
@@ -71,27 +66,16 @@ ido_calendar_menu_item_class_init (IdoCalendarMenuItemClass *klass)
GObjectClass *gobject_class;
GtkWidgetClass *widget_class;
GtkMenuItemClass *menu_item_class;
-#if ! GTK_CHECK_VERSION (3, 0, 0)
- GtkItemClass *item_class;
-#endif
gobject_class = G_OBJECT_CLASS (klass);
widget_class = GTK_WIDGET_CLASS (klass);
menu_item_class = GTK_MENU_ITEM_CLASS (klass);
-#if ! GTK_CHECK_VERSION (3, 0, 0)
- item_class = GTK_ITEM_CLASS (klass);
-#endif
widget_class->button_release_event = ido_calendar_menu_item_button_release;
widget_class->button_press_event = ido_calendar_menu_item_button_press;
-#if GTK_CHECK_VERSION (3, 0, 0)
menu_item_class->select = ido_calendar_menu_item_select;
menu_item_class->deselect = ido_calendar_menu_item_deselect;
-#else
- item_class->select = ido_calendar_menu_item_select;
- item_class->deselect = ido_calendar_menu_item_deselect;
-#endif
menu_item_class->hide_on_activate = TRUE;
@@ -132,11 +116,7 @@ ido_calendar_menu_item_init (IdoCalendarMenuItem *item)
G_CALLBACK (calendar_move_focus_cb),
item);
-#ifdef USE_GTK3
priv->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-#else
- priv->box = gtk_hbox_new (FALSE, 0);
-#endif
gtk_box_pack_start (GTK_BOX (priv->box), priv->calendar, FALSE, FALSE, 0);
@@ -213,7 +193,6 @@ ido_calendar_menu_item_button_press (GtkWidget *widget,
gtk_widget_grab_focus (calendar);
}
-#if GTK_CHECK_VERSION (3, 0, 0)
GdkEvent * newevent = gdk_event_copy((GdkEvent *)(event));
GList * children = gdk_window_get_children(gtk_widget_get_window(calendar));
GList * child;
@@ -242,7 +221,6 @@ ido_calendar_menu_item_button_press (GtkWidget *widget,
((GdkEventButton *)newevent)->window = event->window;
gdk_event_free(newevent);
-#endif
return TRUE;
}
@@ -254,20 +232,14 @@ static gboolean
ido_calendar_menu_item_button_release (GtkWidget *widget,
GdkEventButton *event)
{
-#if GTK_CHECK_VERSION (3, 0, 0)
GtkWidget *calendar = IDO_CALENDAR_MENU_ITEM (widget)->priv->calendar;
GTK_WIDGET_GET_CLASS(calendar)->button_release_event(GTK_WIDGET(calendar), event);
-#endif
return TRUE;
}
static void
-#if GTK_CHECK_VERSION (3, 0, 0)
ido_calendar_menu_item_select (GtkMenuItem *item)
-#else
-ido_calendar_menu_item_select (GtkItem *item)
-#endif
{
IDO_CALENDAR_MENU_ITEM (item)->priv->selected = TRUE;
@@ -275,11 +247,7 @@ ido_calendar_menu_item_select (GtkItem *item)
}
static void
-#if GTK_CHECK_VERSION (3, 0, 0)
ido_calendar_menu_item_deselect (GtkMenuItem *item)
-#else
-ido_calendar_menu_item_deselect (GtkItem *item)
-#endif
{
IDO_CALENDAR_MENU_ITEM (item)->priv->selected = FALSE;
diff --git a/src/idoentrymenuitem.c b/src/idoentrymenuitem.c
index 088c559..5390d0b 100644
--- a/src/idoentrymenuitem.c
+++ b/src/idoentrymenuitem.c
@@ -27,13 +27,8 @@
#include "idoentrymenuitem.h"
#include "config.h"
-#if GTK_CHECK_VERSION (3, 0, 0)
static void ido_entry_menu_item_select (GtkMenuItem *item);
static void ido_entry_menu_item_deselect (GtkMenuItem *item);
-#else
-static void ido_entry_menu_item_select (GtkItem *item);
-static void ido_entry_menu_item_deselect (GtkItem *item);
-#endif
static gboolean ido_entry_menu_item_button_release (GtkWidget *widget,
GdkEventButton *event);
static gboolean ido_entry_menu_item_key_press (GtkWidget *widget,
@@ -66,27 +61,16 @@ ido_entry_menu_item_class_init (IdoEntryMenuItemClass *klass)
GObjectClass *gobject_class;
GtkWidgetClass *widget_class;
GtkMenuItemClass *menu_item_class;
-#if ! GTK_CHECK_VERSION (3, 0, 0)
- GtkItemClass *item_class;
-#endif
gobject_class = G_OBJECT_CLASS (klass);
widget_class = GTK_WIDGET_CLASS (klass);
menu_item_class = GTK_MENU_ITEM_CLASS (klass);
-#if ! GTK_CHECK_VERSION (3, 0, 0)
- item_class = GTK_ITEM_CLASS (klass);
-#endif
widget_class->button_release_event = ido_entry_menu_item_button_release;
widget_class->button_press_event = ido_entry_menu_item_button_press;
-#if GTK_CHECK_VERSION (3, 0, 0)
menu_item_class->select = ido_entry_menu_item_select;
menu_item_class->deselect = ido_entry_menu_item_deselect;
-#else
- item_class->select = ido_entry_menu_item_select;
- item_class->deselect = ido_entry_menu_item_deselect;
-#endif
menu_item_class->hide_on_activate = TRUE;
@@ -119,11 +103,7 @@ ido_entry_menu_item_init (IdoEntryMenuItem *item)
G_CALLBACK (entry_move_focus_cb),
item);
-#ifdef USE_GTK3
priv->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-#else
- priv->box = gtk_hbox_new (FALSE, 0);
-#endif
gtk_box_pack_start (GTK_BOX (priv->box), priv->entry, FALSE, FALSE, 0);
@@ -235,11 +215,7 @@ ido_entry_menu_item_button_release (GtkWidget *widget,
}
static void
-#if GTK_CHECK_VERSION (3, 0, 0)
ido_entry_menu_item_select (GtkMenuItem *item)
-#else
-ido_entry_menu_item_select (GtkItem *item)
-#endif
{
IDO_ENTRY_MENU_ITEM (item)->priv->selected = TRUE;
@@ -247,11 +223,7 @@ ido_entry_menu_item_select (GtkItem *item)
}
static void
-#if GTK_CHECK_VERSION (3, 0, 0)
ido_entry_menu_item_deselect (GtkMenuItem *item)
-#else
-ido_entry_menu_item_deselect (GtkItem *item)
-#endif
{
IDO_ENTRY_MENU_ITEM (item)->priv->selected = FALSE;
diff --git a/src/idomessagedialog.c b/src/idomessagedialog.c
index d4a3e2f..41ff2e7 100644
--- a/src/idomessagedialog.c
+++ b/src/idomessagedialog.c
@@ -167,22 +167,14 @@ ido_message_dialog_focus_in_event (GtkWidget *widget,
IdoTimeline *timeline;
IdoMessageDialogMorphContext *context;
-#ifdef USE_GTK3
gtk_widget_get_preferred_size (GTK_WIDGET (dialog), NULL, &start);
-#else
- gtk_widget_get_requisition (GTK_WIDGET (dialog), &start);
-#endif
priv->expanded = TRUE;
gtk_widget_show (priv->action_area);
gtk_widget_show (priv->secondary_label);
-#ifdef USE_GTK3
gtk_widget_get_preferred_size (GTK_WIDGET (dialog), NULL, &end);
-#else
- gtk_widget_get_requisition (GTK_WIDGET (dialog), &end);
-#endif
gtk_widget_hide (priv->action_area);
gtk_widget_hide (priv->secondary_label);
@@ -289,14 +281,6 @@ ido_message_dialog_new (GtkWindow *parent,
NULL);
dialog = GTK_DIALOG (widget);
-#if ! GTK_CHECK_VERSION(3, 0, 0)
- if (flags & GTK_DIALOG_NO_SEPARATOR)
- {
- g_warning ("The GTK_DIALOG_NO_SEPARATOR flag cannot be used for IdoMessageDialog");
- flags &= ~GTK_DIALOG_NO_SEPARATOR;
- }
-#endif
-
if (message_format)
{
va_start (args, message_format);
@@ -379,11 +363,7 @@ ido_message_dialog_get_label (IdoMessageDialog *dialog, gboolean primary)
for (list = children; list != NULL; list = list->next)
{
-#ifdef USE_GTK3
if (G_TYPE_FROM_INSTANCE (list->data) == GTK_TYPE_BOX && gtk_orientable_get_orientation (list->data) == GTK_ORIENTATION_HORIZONTAL)
-#else
- if (G_TYPE_FROM_INSTANCE (list->data) == GTK_TYPE_HBOX)
-#endif
{
GList *hchildren;
GList *hlist;
@@ -393,11 +373,7 @@ ido_message_dialog_get_label (IdoMessageDialog *dialog, gboolean primary)
for (hlist = hchildren; hlist != NULL; hlist = hlist->next)
{
-#ifdef USE_GTK3
if (G_TYPE_FROM_INSTANCE (hlist->data) == GTK_TYPE_BOX && gtk_orientable_get_orientation (hlist->data) == GTK_ORIENTATION_VERTICAL)
-#else
- if (G_TYPE_FROM_INSTANCE (hlist->data) == GTK_TYPE_VBOX)
-#endif
{
GList *vlist;
GtkWidget *vbox = GTK_WIDGET (hlist->data);
diff --git a/src/idorange.c b/src/idorange.c
index a97d770..3e88fd9 100644
--- a/src/idorange.c
+++ b/src/idorange.c
@@ -41,10 +41,6 @@ static void ido_range_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
-#ifdef USE_GTK3
-static void ido_range_grab_notify (GtkWidget *widget,
- gboolean was_grabbed);
-#endif
#define IDO_RANGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), IDO_TYPE_RANGE, IdoRangePrivate))
@@ -65,10 +61,6 @@ ido_range_class_init (IdoRangeClass *class)
gobject_class->set_property = ido_range_set_property;
gobject_class->get_property = ido_range_get_property;
-#ifdef USE_GTK3
- widget_class->grab_notify = ido_range_grab_notify;
-#endif
-
g_object_class_install_property (gobject_class,
PROP_STYLE,
g_param_spec_enum ("range-style",
@@ -139,21 +131,6 @@ ido_range_set_property (GObject *object,
}
}
-#ifdef USE_GTK3
-static void
-ido_range_grab_notify (GtkWidget *widget, gboolean was_grabbed)
-{
- /*
- * FIXME: workaround for lp bug #865122.
- * Without this handler, GtkRange will call remove_grab which results
- * in an infinite loop of grab_notifies.
- *
- * The widget will still work properly, because grab-broken-event will get
- * properly fired and internal state of GtkRange will be properly updated.
- */
-}
-#endif
-
static void
ido_range_constructed (GObject *object)
{
@@ -176,16 +153,6 @@ ido_range_constructed (GObject *object)
"knob-width", &width,
"knob-height", &height,
NULL);
-
-#ifndef USE_GTK3
- g_snprintf (buf, sizeof (buf),
- "style \"ido-range\" {\n"
- " GtkRange::slider-width = %d\n"
- " GtkScale::slider-length = %d\n"
- "} widget \"*.idorange-%p\" style \"ido-range\"\n",
- width, height, range);
- gtk_rc_parse_string (buf);
-#endif
}
gtk_range_set_slider_size_fixed (GTK_RANGE (range), TRUE);
diff --git a/src/idorange.h b/src/idorange.h
index 0dd6952..7c2e79b 100644
--- a/src/idorange.h
+++ b/src/idorange.h
@@ -28,6 +28,8 @@
#include <gtk/gtk.h>
+G_BEGIN_DECLS
+
#define IDO_TYPE_RANGE (ido_range_get_type ())
#define IDO_RANGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), IDO_TYPE_RANGE, IdoRange))
#define IDO_RANGE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), IDO_TYPE_RANGE, IdoRangeClass))
diff --git a/src/idoscalemenuitem.c b/src/idoscalemenuitem.c
index 499c28f..986d9a7 100644
--- a/src/idoscalemenuitem.c
+++ b/src/idoscalemenuitem.c
@@ -144,27 +144,15 @@ ido_scale_menu_item_size_allocate (GtkWidget *widget,
switch (priv->style)
{
case IDO_SCALE_MENU_ITEM_STYLE_IMAGE:
-#ifdef USE_GTK3
gtk_widget_get_preferred_size (priv->primary_image, &primary_req, NULL);
gtk_widget_get_preferred_size (priv->secondary_image, &secondary_req, NULL);
-#else
- gtk_widget_get_child_requisition (priv->primary_image, &primary_req);
- gtk_widget_get_child_requisition (priv->secondary_image, &secondary_req);
-#endif
-
primary_padding = gtk_widget_get_visible (priv->primary_image) ? primary_req.width : 0;
secondary_padding = gtk_widget_get_visible (priv->secondary_image) ? secondary_req.width : 0;
break;
case IDO_SCALE_MENU_ITEM_STYLE_LABEL:
-#ifdef USE_GTK3
gtk_widget_get_preferred_size (priv->primary_label, &primary_req, NULL);
gtk_widget_get_preferred_size (priv->secondary_label, &secondary_req, NULL);
-#else
- gtk_widget_get_child_requisition (priv->primary_label, &primary_req);
- gtk_widget_get_child_requisition (priv->secondary_label, &secondary_req);
-#endif
-
primary_padding = gtk_widget_get_visible (priv->primary_label) ? primary_req.width : 0;
secondary_padding = gtk_widget_get_visible (priv->secondary_label) ? secondary_req.width : 0;
break;
@@ -236,11 +224,7 @@ ido_scale_menu_item_constructed (GObject *object)
g_object_ref (priv->scale);
gtk_scale_set_draw_value (GTK_SCALE (priv->scale), FALSE);
-#ifdef USE_GTK3
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-#else
- hbox = gtk_hbox_new (FALSE, 0);
-#endif
priv->primary_image = gtk_image_new ();
g_signal_connect (priv->primary_image, "notify",
@@ -485,10 +469,6 @@ ido_scale_menu_item_button_press_event (GtkWidget *menuitem,
IdoScaleMenuItemPrivate *priv = GET_PRIVATE (menuitem);
gdouble x;
-#ifndef USE_GTK3
- GtkWidget *scale = priv->scale;
-#endif
-
// can we block emissions of "grab-notify" on parent??
translate_event_coordinates (menuitem, event->x, &x);
@@ -497,28 +477,16 @@ ido_scale_menu_item_button_press_event (GtkWidget *menuitem,
translate_event_coordinates (menuitem, event->x_root, &x);
event->x_root = x;
-#ifndef USE_GTK3
- ubuntu_gtk_widget_set_has_grab (scale, TRUE);
-#endif
-
gtk_widget_event (priv->scale,
((GdkEvent *)(void*)(event)));
-#ifndef USE_GTK3
- ubuntu_gtk_widget_set_has_grab (scale, FALSE);
-#endif
-
if (!priv->grabbed)
{
priv->grabbed = TRUE;
g_signal_emit (menuitem, signals[SLIDER_GRABBED], 0);
}
-#ifdef USE_GTK3
return FALSE;
-#else
- return TRUE;
-#endif
}
static gboolean
diff --git a/src/idoswitchmenuitem.c b/src/idoswitchmenuitem.c
new file mode 100644
index 0000000..3831336
--- /dev/null
+++ b/src/idoswitchmenuitem.c
@@ -0,0 +1,120 @@
+/*
+ * A GtkCheckMenuItem that uses a GtkSwitch to show its 'active' property
+ *
+ * Copyright © 2012 Canonical Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3, 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 GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Charles Kerr <charles.kerr@canonical.com>
+ */
+
+#include "config.h"
+
+#include "idoswitchmenuitem.h"
+
+static gboolean ido_switch_menu_button_release_event (GtkWidget * widget,
+ GdkEventButton * event);
+
+
+struct _IdoSwitchMenuItemPrivate
+{
+ GtkWidget * box;
+ GtkWidget * content_area;
+ GtkWidget * switch_w;
+};
+
+/***
+**** Life Cycle
+***/
+
+G_DEFINE_TYPE (IdoSwitchMenuItem, ido_switch_menu_item, GTK_TYPE_CHECK_MENU_ITEM)
+
+static void
+ido_switch_menu_item_class_init (IdoSwitchMenuItemClass *klass)
+{
+ GObjectClass * gobject_class;
+ GtkWidgetClass * widget_class;
+ GtkCheckMenuItemClass * check_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ g_type_class_add_private (gobject_class, sizeof (IdoSwitchMenuItemPrivate));
+
+ widget_class = GTK_WIDGET_CLASS (klass);
+ widget_class->button_release_event = ido_switch_menu_button_release_event;
+
+ check_class = GTK_CHECK_MENU_ITEM_CLASS (klass);
+ check_class->draw_indicator = NULL;
+}
+
+static void
+ido_switch_menu_item_init (IdoSwitchMenuItem *item)
+{
+ IdoSwitchMenuItemPrivate *priv;
+
+ priv = item->priv = G_TYPE_INSTANCE_GET_PRIVATE (item, IDO_TYPE_SWITCH_MENU_ITEM, IdoSwitchMenuItemPrivate);
+ priv->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ priv->content_area = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
+ priv->switch_w = gtk_switch_new ();
+
+ gtk_box_pack_start (GTK_BOX (priv->box), priv->content_area, TRUE, TRUE, 0);
+ gtk_box_pack_end (GTK_BOX (priv->box), priv->switch_w, FALSE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (item), priv->box);
+ gtk_widget_show_all (priv->box);
+
+ g_object_bind_property (item, "active",
+ priv->switch_w, "active",
+ G_BINDING_SYNC_CREATE);
+}
+
+/***
+**** Don't popdown the menu immediately after clicking on a switch...
+**** wait a moment so the user can see the GtkSwitch be toggled.
+***/
+
+static gboolean
+popdown_later_cb (gpointer widget)
+{
+ GtkWidget * parent = gtk_widget_get_parent (widget);
+ if (GTK_IS_MENU (parent))
+ {
+ gtk_menu_shell_deactivate (GTK_MENU_SHELL(parent));
+ }
+ g_object_unref (widget);
+ return FALSE; /* only call this cb once */
+}
+
+static gboolean
+ido_switch_menu_button_release_event (GtkWidget * widget, GdkEventButton * event)
+{
+ gtk_menu_item_activate (GTK_MENU_ITEM(widget));
+ g_timeout_add (500, popdown_later_cb, g_object_ref(widget));
+ return TRUE; /* stop the event so that it doesn't trigger popdown() */
+}
+
+/***
+**** Public API
+***/
+
+GtkWidget *
+ido_switch_menu_item_new (void)
+{
+ return g_object_new (IDO_TYPE_SWITCH_MENU_ITEM, NULL);
+}
+
+GtkContainer *
+ido_switch_menu_item_get_content_area (IdoSwitchMenuItem * item)
+{
+ g_return_val_if_fail (IDO_IS_SWITCH_MENU_ITEM(item), NULL);
+
+ return GTK_CONTAINER (item->priv->content_area);
+}
diff --git a/src/idoswitchmenuitem.h b/src/idoswitchmenuitem.h
new file mode 100644
index 0000000..7e7e2d2
--- /dev/null
+++ b/src/idoswitchmenuitem.h
@@ -0,0 +1,57 @@
+/*
+ * A GtkCheckMenuItem that uses a GtkSwitch to show its 'active' property.
+ *
+ * Copyright © 2012 Canonical Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3, 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 GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Charles Kerr <charles.kerr@canonical.com>
+ */
+
+#ifndef __IDO_SWITCH_MENU_ITEM_H__
+#define __IDO_SWITCH_MENU_ITEM_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define IDO_TYPE_SWITCH_MENU_ITEM (ido_switch_menu_item_get_type ())
+#define IDO_SWITCH_MENU_ITEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), IDO_TYPE_SWITCH_MENU_ITEM, IdoSwitchMenuItem))
+#define IDO_SWITCH_MENU_ITEM_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), IDO_TYPE_SWITCH_MENU_ITEM, IdoSwitchMenuItemClass))
+#define IDO_IS_SWITCH_MENU_ITEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), IDO_TYPE_SWITCH_MENU_ITEM))
+#define IDO_IS_SWITCH_MENU_ITEM_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), IDO_TYPE_SWITCH_MENU_ITEM))
+#define IDO_SWITCH_MENU_ITEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), IDO_TYPE_SWITCH_MENU_ITEM, IdoSwitchMenuItemClass))
+
+typedef struct _IdoSwitchMenuItem IdoSwitchMenuItem;
+typedef struct _IdoSwitchMenuItemClass IdoSwitchMenuItemClass;
+typedef struct _IdoSwitchMenuItemPrivate IdoSwitchMenuItemPrivate;
+
+struct _IdoSwitchMenuItem
+{
+ GtkCheckMenuItem parent_instance;
+
+ IdoSwitchMenuItemPrivate *priv;
+};
+
+struct _IdoSwitchMenuItemClass
+{
+ GtkCheckMenuItemClass parent_class;
+};
+
+GType ido_switch_menu_item_get_type (void) G_GNUC_CONST;
+GtkWidget *ido_switch_menu_item_new (void);
+GtkContainer *ido_switch_menu_item_get_content_area (IdoSwitchMenuItem * item);
+
+G_END_DECLS
+
+#endif /* __IDO_SWITCH_MENU_ITEM_H__ */