← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~dbarth/indicator-datetime/calendar-widget into lp:indicator-datetime

 

David Barth has proposed merging lp:~dbarth/indicator-datetime/calendar-widget into lp:indicator-datetime.

Requested reviews:
  Indicator Applet Developers (indicator-applet-developers)


Adds support for the calendar widget + updates the label (see commit log)
-- 
https://code.launchpad.net/~dbarth/indicator-datetime/calendar-widget/+merge/30704
Your team ayatana-commits is subscribed to branch lp:indicator-datetime.
=== modified file 'configure.ac'
--- configure.ac	2010-07-19 12:48:13 +0000
+++ configure.ac	2010-07-22 19:17:53 +0000
@@ -35,11 +35,14 @@
 INDICATOR_REQUIRED_VERSION=0.3.0
 DBUSMENUGLIB_REQUIRED_VERSION=0.1.1
 DBUSMENUGTK_REQUIRED_VERSION=0.1.1
-GIO_REQUIRED_VERSION=2.25.0
+GIO_REQUIRED_VERSION=2.25.11
+# Note: the GIO check below also ensures the proper glib with gsettings support is present
+INDICATOR_DISPLAY_OBJECTS=0.1.10
 
 PKG_CHECK_MODULES(INDICATOR, indicator >= $INDICATOR_REQUIRED_VERSION
                              dbusmenu-glib >= $DBUSMENUGLIB_REQUIRED_VERSION
                              dbusmenu-gtk >= $DBUSMENUGTK_REQUIRED_VERSION
+                             libido-0.1 >= $INDICATOR_DISPLAY_OBJECTS
                              gio-2.0 >= $GIO_REQUIRED_VERSION)
 
 AC_SUBST(INDICATOR_CFLAGS)

=== modified file 'src/Makefile.am'
--- src/Makefile.am	2010-05-19 02:52:49 +0000
+++ src/Makefile.am	2010-07-22 19:17:53 +0000
@@ -2,6 +2,8 @@
 libexec_PROGRAMS = indicator-datetime-service
 
 indicator_datetime_service_SOURCES = \
+	calendar-menu-item.c \
+	calendar-menu-item.h \
 	datetime-service.c \
 	dbus-shared.h
 indicator_datetime_service_CFLAGS = \

=== added file 'src/calendar-menu-item.c'
--- src/calendar-menu-item.c	1970-01-01 00:00:00 +0000
+++ src/calendar-menu-item.c	2010-07-22 19:17:53 +0000
@@ -0,0 +1,100 @@
+/*
+Calendar menu item dbusmenu "transport" for the corresponding IDO widget.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    David Barth <david.barth@xxxxxxxxxxxxx>
+
+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/>.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gdk/gdk.h>
+#include <glib/gi18n.h>
+#include "calendar-menu-item.h"
+
+#include "dbus-shared.h"
+
+#include <libdbusmenu-glib/client.h>
+#include <libdbusmenu-glib/server.h>
+#include <libdbusmenu-glib/menuitem.h>
+
+enum {
+	LAST_SIGNAL
+};
+
+/* static guint signals[LAST_SIGNAL] = { }; */
+
+typedef struct _CalendarMenuItemPrivate CalendarMenuItemPrivate;
+struct _CalendarMenuItemPrivate
+{
+	void * placeholder;
+};
+
+#define CALENDAR_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemPrivate))
+
+/* Prototypes */
+static void calendar_menu_item_class_init (CalendarMenuItemClass *klass);
+static void calendar_menu_item_init       (CalendarMenuItem *self);
+static void calendar_menu_item_dispose    (GObject *object);
+static void calendar_menu_item_finalize   (GObject *object);
+
+G_DEFINE_TYPE (CalendarMenuItem, calendar_menu_item, DBUSMENU_TYPE_MENUITEM);
+
+static void
+calendar_menu_item_class_init (CalendarMenuItemClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (CalendarMenuItemPrivate));
+
+	object_class->dispose = calendar_menu_item_dispose;
+	object_class->finalize = calendar_menu_item_finalize;
+
+	return;
+}
+
+static void
+calendar_menu_item_init (CalendarMenuItem *self)
+{
+	return;
+}
+
+static void
+calendar_menu_item_dispose (GObject *object)
+{
+	G_OBJECT_CLASS (calendar_menu_item_parent_class)->dispose (object);
+}
+
+static void
+calendar_menu_item_finalize (GObject *object)
+{
+	G_OBJECT_CLASS (calendar_menu_item_parent_class)->finalize (object);
+
+	return;
+}
+
+CalendarMenuItem *
+calendar_menu_item_new ()
+{
+	CalendarMenuItem * self = g_object_new(CALENDAR_MENU_ITEM_TYPE, NULL);
+
+	dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CALENDAR_MENUITEM_TYPE);
+
+	return self;
+}
+

=== added file 'src/calendar-menu-item.h'
--- src/calendar-menu-item.h	1970-01-01 00:00:00 +0000
+++ src/calendar-menu-item.h	2010-07-22 19:17:53 +0000
@@ -0,0 +1,59 @@
+/*
+Calendar menu item dbusmenu "transport" for the corresponding IDO widget.
+
+Copyright 2010 Canonical Ltd.
+
+Authors:
+    David Barth <david.barth@xxxxxxxxxxxxx>
+
+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/>.
+*/
+
+#ifndef __CALENDAR_MENU_ITEM_H__
+#define __CALENDAR_MENU_ITEM_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libdbusmenu-glib/menuitem.h>
+
+G_BEGIN_DECLS
+
+#define CALENDAR_MENU_ITEM_TYPE            (calendar_menu_item_get_type ())
+#define CALENDAR_MENU_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItem))
+#define CALENDAR_MENU_ITEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemClass))
+#define IS_CALENDAR_MENU_ITEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALENDAR_MENU_ITEM_TYPE))
+#define IS_CALENDAR_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALENDAR_MENU_ITEM_TYPE))
+#define CALENDAR_MENU_ITEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CALENDAR_MENU_ITEM_TYPE, CalendarMenuItemClass))
+
+#define CALENDAR_MENU_ITEM_SIGNAL_ACTIVATE   "activate"
+#define CALENDAR_MENUITEM_PROP_TEXT          "text"
+
+typedef struct _CalendarMenuItem      CalendarMenuItem;
+typedef struct _CalendarMenuItemClass CalendarMenuItemClass;
+
+struct _CalendarMenuItemClass {
+	DbusmenuMenuitemClass parent_class;
+};
+
+struct _CalendarMenuItem {
+	DbusmenuMenuitem parent;
+};
+
+GType calendar_menu_item_get_type (void);
+CalendarMenuItem * calendar_menu_item_new ();
+
+G_END_DECLS
+
+#endif /* __CALENDAR_MENU_ITEM_H__ */
+

=== modified file 'src/datetime-service.c'
--- src/datetime-service.c	2010-07-12 20:51:03 +0000
+++ src/datetime-service.c	2010-07-22 19:17:53 +0000
@@ -141,7 +141,7 @@
 
 	if (calendar == NULL) {
 		calendar = dbusmenu_menuitem_new();
-		dbusmenu_menuitem_property_set     (calendar, DBUSMENU_MENUITEM_PROP_LABEL, _("Open Calendar"));
+		dbusmenu_menuitem_property_set (calendar, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CALENDAR_MENUITEM_TYPE);
 		/* insensitive until we check for available apps */
 		dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
 		g_signal_connect (G_OBJECT(calendar), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED,
@@ -156,7 +156,7 @@
 	dbusmenu_menuitem_child_append(root, separator);
 
 	settings = dbusmenu_menuitem_new();
-	dbusmenu_menuitem_property_set     (settings, DBUSMENU_MENUITEM_PROP_LABEL, _("Set Time and Date..."));
+	dbusmenu_menuitem_property_set     (settings, DBUSMENU_MENUITEM_PROP_LABEL, _("Time & Date Settings..."));
 	/* insensitive until we check for available apps */
 	dbusmenu_menuitem_property_set_bool(settings, DBUSMENU_MENUITEM_PROP_ENABLED, FALSE);
 	g_signal_connect(G_OBJECT(settings), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), "time-admin");

=== modified file 'src/dbus-shared.h'
--- src/dbus-shared.h	2010-07-12 20:34:19 +0000
+++ src/dbus-shared.h	2010-07-22 19:17:53 +0000
@@ -27,3 +27,5 @@
 
 #define  MENU_OBJ      "/org/ayatana/indicator/datetime/menu"
 
+#define  DBUSMENU_CALENDAR_MENUITEM_TYPE "x-canonical-calendar-item"
+

=== modified file 'src/indicator-datetime.c'
--- src/indicator-datetime.c	2010-07-16 21:54:15 +0000
+++ src/indicator-datetime.c	2010-07-22 19:17:53 +0000
@@ -36,6 +36,7 @@
 
 /* DBusMenu */
 #include <libdbusmenu-gtk/menu.h>
+#include <libido/idocalendarmenuitem.h>
 
 #include "dbus-shared.h"
 
@@ -78,6 +79,8 @@
 	IndicatorServiceManager * sm;
 	DbusmenuGtkMenu * menu;
 
+	IdoCalendarMenuItem *ido_calendar;
+
 	GSettings * settings;
 };
 
@@ -882,6 +885,32 @@
 	return g_strdup_printf(_("%s, %s"), date_string, time_string);
 }
 
+static gboolean
+new_calendar_item (DbusmenuMenuitem * newitem,
+				   DbusmenuMenuitem * parent,
+				   DbusmenuClient   * client)
+{
+	g_return_val_if_fail(DBUSMENU_IS_MENUITEM(newitem), FALSE);
+	g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), FALSE);
+	/* Note: not checking parent, it's reasonable for it to be NULL */
+
+	IndicatorObject *io = g_object_get_data (G_OBJECT (client), "indicator");
+	if (io == NULL) {
+		g_warning ("found no indicator to attach the caledar to");
+		return FALSE;
+	}
+
+	IndicatorDatetime *self = INDICATOR_DATETIME(io);
+	self->priv = INDICATOR_DATETIME_GET_PRIVATE(self);
+	
+	IdoCalendarMenuItem *ido = IDO_CALENDAR_MENU_ITEM (ido_calendar_menu_item_new ());
+	self->priv->ido_calendar = ido;
+
+	dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(ido), parent);
+
+	return TRUE;
+}
+
 /* Grabs the label.  Creates it if it doesn't
    exist already */
 static GtkLabel *
@@ -915,5 +944,10 @@
 		self->priv->menu = dbusmenu_gtkmenu_new(SERVICE_NAME, MENU_OBJ);
 	}
 
+	DbusmenuGtkClient *client = dbusmenu_gtkmenu_get_client(self->priv->menu);
+	g_object_set_data (G_OBJECT (client), "indicator", io);
+
+	dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(client), DBUSMENU_CALENDAR_MENUITEM_TYPE, new_calendar_item);
+
 	return GTK_MENU(self->priv->menu);
 }


Follow ups