gnome-settings-daemon r358 - in branches/randr-12: . plugins/xrandr
- From: federico svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-settings-daemon r358 - in branches/randr-12: . plugins/xrandr
- Date: Fri, 30 May 2008 18:00:36 +0000 (UTC)
Author: federico
Date: Fri May 30 18:00:36 2008
New Revision: 358
URL: http://svn.gnome.org/viewvc/gnome-settings-daemon?rev=358&view=rev
Log:
Popup menu for the xrandr status icon
2008-05-30 Federico Mena Quintero <federico novell com>
* plugins/xrandr/gsd-xrandr-manager.c (status_icon_start):
Connect to the activate / popup-menu signals on the status icon.
(status_icon_popup_menu): New function; creates a popup menu for
the status icon.
Signed-off-by: Federico Mena Quintero <federico novell com>
Modified:
branches/randr-12/ChangeLog
branches/randr-12/plugins/xrandr/gsd-xrandr-manager.c
Modified: branches/randr-12/plugins/xrandr/gsd-xrandr-manager.c
==============================================================================
--- branches/randr-12/plugins/xrandr/gsd-xrandr-manager.c (original)
+++ branches/randr-12/plugins/xrandr/gsd-xrandr-manager.c Fri May 30 18:00:36 2008
@@ -60,6 +60,9 @@
/* name of the icon files (gsd-xrandr.svg, etc.) */
#define GSD_XRANDR_ICON_NAME "gsd-xrandr"
+/* executable of the control center's display configuration capplet */
+#define GSD_XRANDR_DISPLAY_CAPPLET "gnome-display-properties"
+
struct GsdXrandrManagerPrivate
{
/* Key code of the fn-F7 video key (XF86Display) */
@@ -145,7 +148,7 @@
static void
on_randr_event (RWScreen *screen, gpointer data)
{
- GsdXrandrManager *manager = data;
+ GsdXrandrManager *manager = GSD_XRANDR_MANAGER (data);
if (!manager->priv->running)
return;
@@ -154,6 +157,71 @@
}
static void
+popup_menu_configure_display_cb (GtkMenuItem *item, gpointer data)
+{
+ GsdXrandrManager *manager = GSD_XRANDR_MANAGER (data);
+ GdkScreen *screen;
+ GError *error;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (item));
+
+ error = NULL;
+ if (!gdk_spawn_command_line_on_screen (screen, GSD_XRANDR_DISPLAY_CAPPLET, &error)) {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new_with_markup (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
+ "<span weight=\"bold\" size=\"larger\">"
+ "Display configuration could not be run"
+ "</span>\n\n"
+ "%s", error->message);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ g_error_free (error);
+ }
+}
+
+static void
+status_icon_popup_menu (GsdXrandrManager *manager, guint button, guint32 timestamp)
+{
+ GtkWidget *menu;
+ GtkWidget *item;
+
+ menu = gtk_menu_new ();
+
+ item = gtk_menu_item_new_with_label (_("Screen Rotation"));
+ gtk_widget_set_sensitive (item, FALSE);
+ gtk_widget_show (item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Configure Display Settings"));
+ g_signal_connect (item, "activate",
+ G_CALLBACK (popup_menu_configure_display_cb), manager);
+ gtk_widget_show (item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ /* FIXME */
+
+ /* FIXME: the menu should get destroyed after a command gets activated */
+}
+
+static void
+status_icon_activate_cb (GtkStatusIcon *status_icon, gpointer data)
+{
+ GsdXrandrManager *manager = GSD_XRANDR_MANAGER (data);
+
+ /* Suck; we don't get a proper button/timestamp */
+ status_icon_popup_menu (manager, 0, gtk_get_current_event_time ());
+}
+
+static void
+status_icon_popup_menu_cb (GtkStatusIcon *status_icon, guint button, guint32 timestamp, gpointer data)
+{
+ GsdXrandrManager *manager = GSD_XRANDR_MANAGER (data);
+
+ status_icon_popup_menu (manager, button, timestamp);
+}
+
+static void
status_icon_start (GsdXrandrManager *manager)
{
struct GsdXrandrManagerPrivate *priv = manager->priv;
@@ -167,6 +235,11 @@
priv->status_icon = gtk_status_icon_new_from_icon_name (GSD_XRANDR_ICON_NAME);
gtk_status_icon_set_tooltip (priv->status_icon, _("Configure display settings"));
+
+ g_signal_connect (priv->status_icon, "activate",
+ G_CALLBACK (status_icon_activate_cb), manager);
+ g_signal_connect (priv->status_icon, "popup-menu",
+ G_CALLBACK (status_icon_popup_menu_cb), manager);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]