Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
|
|
|
|
*
|
|
|
|
* Copyright (C) 2001-2003 Bastien Nocera <hadess@hadess.net>
|
|
|
|
* Copyright (C) 2006 William Jon McCann <mccann@jhu.edu>
|
2004-01-13 15:59:09 +00:00
|
|
|
*
|
|
|
|
* gnome-settings-multimedia-keys.c
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY 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, write to the Free Software
|
2007-07-01 15:56:19 +00:00
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
2004-01-13 15:59:09 +00:00
|
|
|
* USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
2005-05-22 15:46:45 +00:00
|
|
|
#include <string.h>
|
2004-01-13 15:59:09 +00:00
|
|
|
#include <sys/file.h>
|
|
|
|
#include <X11/X.h>
|
|
|
|
|
|
|
|
/* Gnome headers */
|
2005-05-22 15:46:45 +00:00
|
|
|
#include <glib/gi18n.h>
|
2004-01-13 15:59:09 +00:00
|
|
|
#include <gdk/gdkx.h>
|
2005-05-22 15:46:45 +00:00
|
|
|
#include <gtk/gtk.h>
|
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
#include "eggaccelerators.h"
|
|
|
|
|
2004-01-14 13:19:04 +00:00
|
|
|
#include "actions/acme.h"
|
|
|
|
#include "actions/acme-volume.h"
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
#include "gsd-media-keys-window.h"
|
2007-01-08 16:48:19 +00:00
|
|
|
#include "gnome-settings-dbus.h"
|
2007-06-21 12:19:06 +00:00
|
|
|
#include "gnome-settings-module.h"
|
2004-01-14 13:19:04 +00:00
|
|
|
|
|
|
|
#define VOLUME_STEP 6 /* percents for one volume button press */
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
/* we exclude shift, GDK_CONTROL_MASK and GDK_MOD1_MASK since we know what
|
|
|
|
these modifiers mean
|
|
|
|
these are the mods whose combinations are bound by the keygrabbing code */
|
|
|
|
#define IGNORED_MODS (0x2000 /*Xkb modifier*/ | GDK_LOCK_MASK | \
|
|
|
|
GDK_MOD2_MASK | GDK_MOD3_MASK | GDK_MOD4_MASK | GDK_MOD5_MASK)
|
|
|
|
/* these are the ones we actually use for global keys, we always only check
|
|
|
|
* for these set */
|
|
|
|
#define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
|
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
typedef struct {
|
|
|
|
GnomeSettingsModule parent;
|
|
|
|
} GnomeSettingsModuleMultimediaKeys;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
GnomeSettingsModuleClass parent_class;
|
|
|
|
} GnomeSettingsModuleMultimediaKeysClass;
|
|
|
|
|
2007-01-08 16:48:19 +00:00
|
|
|
typedef struct Acme Acme;
|
|
|
|
|
|
|
|
struct Acme {
|
2004-01-13 15:59:09 +00:00
|
|
|
AcmeVolume *volobj;
|
|
|
|
GtkWidget *dialog;
|
|
|
|
GConfClient *conf_client;
|
|
|
|
|
|
|
|
/* Multihead stuff */
|
|
|
|
GdkScreen *current_screen;
|
|
|
|
GSList *screens;
|
2007-01-08 16:48:19 +00:00
|
|
|
|
|
|
|
/* GnomeSettingsServer */
|
|
|
|
GObject *server;
|
|
|
|
};
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
static GnomeSettingsModuleRunlevel gnome_settings_module_multimedia_keys_get_runlevel (GnomeSettingsModule *module);
|
|
|
|
static gboolean gnome_settings_module_multimedia_keys_initialize (GnomeSettingsModule *module,
|
|
|
|
GConfClient *client);
|
|
|
|
static gboolean gnome_settings_module_multimedia_keys_start (GnomeSettingsModule *module);
|
|
|
|
static gboolean gnome_settings_module_multimedia_keys_stop (GnomeSettingsModule *module);
|
|
|
|
|
|
|
|
static void
|
|
|
|
gnome_settings_module_multimedia_keys_class_init (GnomeSettingsModuleMultimediaKeysClass *klass)
|
|
|
|
{
|
|
|
|
GnomeSettingsModuleClass *module_class;
|
|
|
|
|
|
|
|
module_class = (GnomeSettingsModuleClass *) klass;
|
|
|
|
module_class->get_runlevel = gnome_settings_module_multimedia_keys_get_runlevel;
|
|
|
|
module_class->initialize = gnome_settings_module_multimedia_keys_initialize;
|
|
|
|
module_class->start = gnome_settings_module_multimedia_keys_start;
|
|
|
|
module_class->stop = gnome_settings_module_multimedia_keys_stop;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gnome_settings_module_multimedia_keys_init (GnomeSettingsModuleMultimediaKeys *module)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
GType
|
|
|
|
gnome_settings_module_multimedia_keys_get_type (void)
|
|
|
|
{
|
|
|
|
static GType module_type = 0;
|
|
|
|
|
|
|
|
if (!module_type) {
|
2007-07-01 15:56:19 +00:00
|
|
|
const GTypeInfo module_info = {
|
2007-06-21 12:19:06 +00:00
|
|
|
sizeof (GnomeSettingsModuleMultimediaKeysClass),
|
|
|
|
NULL, /* base_init */
|
|
|
|
NULL, /* base_finalize */
|
|
|
|
(GClassInitFunc) gnome_settings_module_multimedia_keys_class_init,
|
|
|
|
NULL, /* class_finalize */
|
|
|
|
NULL, /* class_data */
|
|
|
|
sizeof (GnomeSettingsModuleMultimediaKeys),
|
|
|
|
0, /* n_preallocs */
|
|
|
|
(GInstanceInitFunc) gnome_settings_module_multimedia_keys_init,
|
|
|
|
};
|
|
|
|
|
|
|
|
module_type = g_type_register_static (GNOME_SETTINGS_TYPE_MODULE,
|
|
|
|
"GnomeSettingsModuleMultimediaKeys",
|
|
|
|
&module_info, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return module_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
static GnomeSettingsModuleRunlevel
|
|
|
|
gnome_settings_module_multimedia_keys_get_runlevel (GnomeSettingsModule *module)
|
|
|
|
{
|
|
|
|
return GNOME_SETTINGS_MODULE_RUNLEVEL_GNOME_SETTINGS;
|
|
|
|
}
|
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
static void
|
|
|
|
acme_error (char * msg)
|
|
|
|
{
|
|
|
|
GtkWidget *error_dialog;
|
|
|
|
|
|
|
|
error_dialog =
|
|
|
|
gtk_message_dialog_new (NULL,
|
|
|
|
GTK_DIALOG_MODAL,
|
|
|
|
GTK_MESSAGE_ERROR,
|
|
|
|
GTK_BUTTONS_OK,
|
|
|
|
"%s", msg);
|
|
|
|
gtk_dialog_set_default_response (GTK_DIALOG (error_dialog),
|
|
|
|
GTK_RESPONSE_OK);
|
|
|
|
gtk_widget_show (error_dialog);
|
2004-03-24 02:58:55 +00:00
|
|
|
g_signal_connect (G_OBJECT (error_dialog),
|
|
|
|
"response",
|
|
|
|
G_CALLBACK (gtk_widget_destroy), NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
static char *
|
2007-06-21 12:19:06 +00:00
|
|
|
get_term_command (Acme *acme)
|
|
|
|
{
|
2007-03-29 18:47:28 +00:00
|
|
|
gchar *cmd_term;
|
|
|
|
gchar *cmd = NULL;
|
|
|
|
|
|
|
|
cmd_term = gconf_client_get_string (acme->conf_client,
|
2007-06-21 12:19:06 +00:00
|
|
|
"/desktop/gnome/applications/terminal/exec", NULL);
|
2007-03-29 18:47:28 +00:00
|
|
|
if ((cmd_term != NULL) && (strcmp (cmd_term, "") != 0)) {
|
|
|
|
gchar *cmd_args;
|
|
|
|
cmd_args = gconf_client_get_string (acme->conf_client,
|
2007-06-21 12:19:06 +00:00
|
|
|
"/desktop/gnome/applications/terminal/exec_arg", NULL);
|
2007-03-29 18:47:28 +00:00
|
|
|
if ((cmd_args != NULL) && (strcmp (cmd_term, "") != 0))
|
|
|
|
cmd = g_strdup_printf ("%s %s -e", cmd_term, cmd_args);
|
|
|
|
else
|
|
|
|
cmd = g_strdup_printf ("%s -e", cmd_term);
|
2007-07-01 15:56:19 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
g_free (cmd_args);
|
2007-07-01 15:56:19 +00:00
|
|
|
}
|
2007-03-29 18:47:28 +00:00
|
|
|
g_free (cmd_term);
|
|
|
|
return cmd;
|
|
|
|
}
|
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
static void
|
2007-03-29 18:47:28 +00:00
|
|
|
execute (Acme *acme, char *cmd, gboolean sync, gboolean need_term)
|
2004-01-13 15:59:09 +00:00
|
|
|
{
|
|
|
|
gboolean retval;
|
2005-01-05 03:03:10 +00:00
|
|
|
gchar **argv;
|
|
|
|
gint argc;
|
2007-03-29 18:47:28 +00:00
|
|
|
char *exec;
|
|
|
|
char *term = NULL;
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
|
2005-01-05 03:03:10 +00:00
|
|
|
retval = FALSE;
|
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
if (need_term) {
|
|
|
|
term = get_term_command (acme);
|
|
|
|
if (term == NULL) {
|
|
|
|
acme_error (_("Could not get default terminal. Verify that your default "
|
|
|
|
"terminal command is set and points to a valid application."));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2007-07-01 15:56:19 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
if (term) {
|
|
|
|
exec = g_strdup_printf ("%s %s", term, cmd);
|
|
|
|
g_free (term);
|
|
|
|
} else
|
|
|
|
exec = g_strdup (cmd);
|
|
|
|
|
|
|
|
if (g_shell_parse_argv (exec, &argc, &argv, NULL)) {
|
2005-01-05 03:03:10 +00:00
|
|
|
if (sync != FALSE) {
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
retval = g_spawn_sync (g_get_home_dir (),
|
2005-01-05 03:03:10 +00:00
|
|
|
argv, NULL, G_SPAWN_SEARCH_PATH,
|
|
|
|
NULL, NULL, NULL, NULL, NULL, NULL);
|
2007-06-21 12:19:06 +00:00
|
|
|
} else {
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
retval = g_spawn_async (g_get_home_dir (),
|
2005-01-05 03:03:10 +00:00
|
|
|
argv, NULL, G_SPAWN_SEARCH_PATH,
|
|
|
|
NULL, NULL, NULL, NULL);
|
|
|
|
}
|
|
|
|
g_strfreev (argv);
|
|
|
|
}
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
if (retval == FALSE) {
|
2004-01-13 15:59:09 +00:00
|
|
|
char *msg;
|
|
|
|
msg = g_strdup_printf
|
|
|
|
(_("Couldn't execute command: %s\n"
|
2007-03-29 18:47:28 +00:00
|
|
|
"Verify that this is a valid command."),
|
|
|
|
exec);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
acme_error (msg);
|
|
|
|
g_free (msg);
|
|
|
|
}
|
2007-03-29 18:47:28 +00:00
|
|
|
g_free (exec);
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_sleep_action (char *cmd1, char *cmd2)
|
|
|
|
{
|
2007-06-21 12:19:06 +00:00
|
|
|
if (g_spawn_command_line_async (cmd1, NULL) == FALSE) {
|
|
|
|
if (g_spawn_command_line_async (cmd2, NULL) == FALSE) {
|
2004-01-13 15:59:09 +00:00
|
|
|
acme_error (_("Couldn't put the machine to sleep.\n"
|
|
|
|
"Verify that the machine is correctly configured."));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-03-24 02:58:55 +00:00
|
|
|
static void
|
|
|
|
dialog_init (Acme *acme)
|
|
|
|
{
|
2007-03-26 19:01:50 +00:00
|
|
|
if (acme->dialog != NULL &&
|
2007-06-21 12:19:06 +00:00
|
|
|
!gsd_media_keys_window_is_valid (GSD_MEDIA_KEYS_WINDOW (acme->dialog))) {
|
2007-03-26 19:01:50 +00:00
|
|
|
g_object_unref (acme->dialog);
|
|
|
|
acme->dialog = NULL;
|
|
|
|
}
|
|
|
|
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
if (acme->dialog == NULL) {
|
|
|
|
acme->dialog = gsd_media_keys_window_new ();
|
2004-03-24 02:58:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
static gboolean
|
|
|
|
grab_key_real (Key *key, GdkWindow *root, gboolean grab, int result)
|
|
|
|
{
|
|
|
|
gdk_error_trap_push ();
|
|
|
|
if (grab)
|
|
|
|
XGrabKey (GDK_DISPLAY(), key->keycode, (result | key->state),
|
|
|
|
GDK_WINDOW_XID (root), True, GrabModeAsync, GrabModeAsync);
|
|
|
|
else
|
|
|
|
XUngrabKey(GDK_DISPLAY(), key->keycode, (result | key->state),
|
|
|
|
GDK_WINDOW_XID (root));
|
|
|
|
gdk_flush ();
|
|
|
|
|
|
|
|
gdk_error_trap_pop ();
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* inspired from all_combinations from gnome-panel/gnome-panel/global-keys.c */
|
|
|
|
#define N_BITS 32
|
|
|
|
static void
|
|
|
|
grab_key (Acme *acme, Key *key, gboolean grab)
|
|
|
|
{
|
|
|
|
int indexes[N_BITS];/*indexes of bits we need to flip*/
|
|
|
|
int i, bit, bits_set_cnt;
|
|
|
|
int uppervalue;
|
|
|
|
guint mask_to_traverse = IGNORED_MODS & ~ key->state;
|
|
|
|
|
|
|
|
bit = 0;
|
|
|
|
for (i = 0; i < N_BITS; i++) {
|
|
|
|
if (mask_to_traverse & (1<<i))
|
|
|
|
indexes[bit++]=i;
|
|
|
|
}
|
|
|
|
|
|
|
|
bits_set_cnt = bit;
|
|
|
|
|
|
|
|
uppervalue = 1<<bits_set_cnt;
|
|
|
|
for (i = 0; i < uppervalue; i++) {
|
|
|
|
GSList *l;
|
|
|
|
int j, result = 0;
|
|
|
|
|
|
|
|
for (j = 0; j < bits_set_cnt; j++) {
|
|
|
|
if (i & (1<<j))
|
|
|
|
result |= (1<<indexes[j]);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (l = acme->screens; l ; l = l->next) {
|
|
|
|
GdkScreen *screen = l->data;
|
|
|
|
if (grab_key_real (key, gdk_screen_get_root_window (screen), grab, result) == FALSE)
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
is_valid_shortcut (const char *string)
|
|
|
|
{
|
|
|
|
if (string == NULL || string[0] == '\0')
|
|
|
|
return FALSE;
|
|
|
|
if (strcmp (string, "disabled") == 0)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
update_kbd_cb (GConfClient *client, guint id, GConfEntry *entry, gpointer data)
|
|
|
|
{
|
|
|
|
Acme *acme = (Acme *) data;
|
|
|
|
int i;
|
|
|
|
gboolean found = FALSE;
|
|
|
|
|
|
|
|
g_return_if_fail (entry->key != NULL);
|
|
|
|
|
|
|
|
/* Find the key that was modified */
|
2007-06-21 12:19:06 +00:00
|
|
|
for (i = 0; i < HANDLED_KEYS; i++) {
|
|
|
|
if (strcmp (entry->key, keys[i].gconf_key) == 0) {
|
2006-05-24 13:46:23 +00:00
|
|
|
char *tmp;
|
2004-01-13 15:59:09 +00:00
|
|
|
Key *key;
|
|
|
|
|
|
|
|
found = TRUE;
|
|
|
|
|
|
|
|
if (keys[i].key != NULL)
|
|
|
|
grab_key (acme, keys[i].key, FALSE);
|
|
|
|
|
|
|
|
g_free (keys[i].key);
|
|
|
|
keys[i].key = NULL;
|
|
|
|
|
|
|
|
tmp = gconf_client_get_string (acme->conf_client,
|
|
|
|
keys[i].gconf_key, NULL);
|
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
if (is_valid_shortcut (tmp) == FALSE) {
|
2006-05-24 13:46:23 +00:00
|
|
|
g_free (tmp);
|
2006-01-30 15:02:50 +00:00
|
|
|
break;
|
2006-05-24 13:46:23 +00:00
|
|
|
}
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
key = g_new0 (Key, 1);
|
2005-12-12 15:39:41 +00:00
|
|
|
if (egg_accelerator_parse_virtual (tmp, &key->keysym, &key->keycode, &key->state) == FALSE
|
2007-06-21 12:19:06 +00:00
|
|
|
|| key->keycode == 0) {
|
2006-05-24 13:46:23 +00:00
|
|
|
g_free (tmp);
|
2004-01-13 15:59:09 +00:00
|
|
|
g_free (key);
|
2006-01-30 15:02:50 +00:00
|
|
|
break;
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
grab_key (acme, key, TRUE);
|
|
|
|
keys[i].key = key;
|
|
|
|
|
2006-05-24 13:46:23 +00:00
|
|
|
g_free (tmp);
|
|
|
|
|
2006-01-30 15:02:50 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (found != FALSE)
|
|
|
|
return;
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
init_screens (Acme *acme)
|
|
|
|
{
|
|
|
|
GdkDisplay *display = gdk_display_get_default ();
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (gdk_display_get_n_screens (display) == 1) {
|
|
|
|
GdkScreen *screen = gdk_screen_get_default ();
|
|
|
|
acme->screens = g_slist_append (acme->screens, screen);
|
|
|
|
acme->current_screen = screen;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
for (i = 0; i < gdk_display_get_n_screens (display); i++) {
|
2004-01-13 15:59:09 +00:00
|
|
|
GdkScreen *screen;
|
|
|
|
|
|
|
|
screen = gdk_display_get_screen (display, i);
|
|
|
|
if (screen == NULL)
|
|
|
|
continue;
|
|
|
|
acme->screens = g_slist_append (acme->screens, screen);
|
|
|
|
}
|
|
|
|
|
|
|
|
acme->current_screen = (GdkScreen *)acme->screens->data;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
init_kbd (Acme *acme)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
for (i = 0; i < HANDLED_KEYS; i++) {
|
2004-10-21 19:41:26 +00:00
|
|
|
char *tmp;
|
2004-01-13 15:59:09 +00:00
|
|
|
Key *key;
|
|
|
|
|
|
|
|
gconf_client_notify_add (acme->conf_client,
|
|
|
|
keys[i].gconf_key, update_kbd_cb,
|
|
|
|
acme, NULL, NULL);
|
|
|
|
|
|
|
|
tmp = gconf_client_get_string (acme->conf_client,
|
|
|
|
keys[i].gconf_key, NULL);
|
2004-10-21 19:41:26 +00:00
|
|
|
if (!is_valid_shortcut (tmp)) {
|
|
|
|
g_free (tmp);
|
2004-01-13 15:59:09 +00:00
|
|
|
continue;
|
2004-10-21 19:41:26 +00:00
|
|
|
}
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
key = g_new0 (Key, 1);
|
2005-12-12 15:39:41 +00:00
|
|
|
if (!egg_accelerator_parse_virtual (tmp, &key->keysym, &key->keycode, &key->state)
|
2007-06-21 12:19:06 +00:00
|
|
|
|| key->keycode == 0) {
|
2004-10-21 19:41:26 +00:00
|
|
|
g_free (tmp);
|
2004-01-13 15:59:09 +00:00
|
|
|
g_free (key);
|
|
|
|
continue;
|
|
|
|
}
|
2006-08-24 14:44:43 +00:00
|
|
|
/*avoid grabbing all the keyboard when KeyCode cannot be retrieved */
|
2007-06-21 12:19:06 +00:00
|
|
|
if (key->keycode == AnyKey) {
|
|
|
|
g_warning ("The shortcut key \"%s\" cannot be found on the current system, ignoring the binding", tmp);
|
|
|
|
g_free (tmp);
|
|
|
|
g_free (key);
|
|
|
|
continue;
|
|
|
|
}
|
2006-08-24 14:44:43 +00:00
|
|
|
|
2004-10-21 19:41:26 +00:00
|
|
|
g_free (tmp);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
keys[i].key = key;
|
|
|
|
|
|
|
|
grab_key (acme, key, TRUE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
dialog_show (Acme *acme)
|
|
|
|
{
|
2007-03-18 13:53:58 +00:00
|
|
|
int orig_w, orig_h;
|
2004-01-13 15:59:09 +00:00
|
|
|
int screen_w, screen_h;
|
|
|
|
int x, y;
|
|
|
|
int pointer_x, pointer_y;
|
2007-03-18 13:53:58 +00:00
|
|
|
GtkRequisition win_req;
|
2004-01-13 15:59:09 +00:00
|
|
|
GdkScreen *pointer_screen;
|
|
|
|
GdkRectangle geometry;
|
|
|
|
int monitor;
|
|
|
|
|
|
|
|
gtk_window_set_screen (GTK_WINDOW (acme->dialog), acme->current_screen);
|
|
|
|
|
2007-03-18 13:53:58 +00:00
|
|
|
/*
|
|
|
|
* get the window size
|
|
|
|
* if the window hasn't been mapped, it doesn't necessarily
|
|
|
|
* know its true size, yet, so we need to jump through hoops
|
|
|
|
*/
|
|
|
|
gtk_window_get_default_size (GTK_WINDOW (acme->dialog), &orig_w, &orig_h);
|
|
|
|
gtk_widget_size_request (acme->dialog, &win_req);
|
|
|
|
|
|
|
|
if (win_req.width > orig_w)
|
|
|
|
orig_w = win_req.width;
|
|
|
|
if (win_req.height > orig_h)
|
|
|
|
orig_h = win_req.height;
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
pointer_screen = NULL;
|
|
|
|
gdk_display_get_pointer (gdk_screen_get_display (acme->current_screen),
|
|
|
|
&pointer_screen, &pointer_x,
|
|
|
|
&pointer_y, NULL);
|
|
|
|
if (pointer_screen != acme->current_screen) {
|
|
|
|
/* The pointer isn't on the current screen, so just
|
|
|
|
* assume the default monitor
|
|
|
|
*/
|
|
|
|
monitor = 0;
|
|
|
|
} else {
|
2004-03-24 02:58:55 +00:00
|
|
|
monitor = gdk_screen_get_monitor_at_point (acme->current_screen,
|
|
|
|
pointer_x, pointer_y);
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
gdk_screen_get_monitor_geometry (acme->current_screen, monitor,
|
|
|
|
&geometry);
|
|
|
|
|
|
|
|
screen_w = geometry.width;
|
|
|
|
screen_h = geometry.height;
|
|
|
|
|
|
|
|
x = ((screen_w - orig_w) / 2) + geometry.x;
|
|
|
|
y = geometry.y + (screen_h / 2) + (screen_h / 2 - orig_h) / 2;
|
|
|
|
|
2004-09-29 20:52:53 +00:00
|
|
|
gtk_window_move (GTK_WINDOW (acme->dialog), x, y);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2004-09-29 20:52:53 +00:00
|
|
|
gtk_widget_show (acme->dialog);
|
2004-08-30 13:04:48 +00:00
|
|
|
|
2004-09-29 20:52:53 +00:00
|
|
|
gdk_display_sync (gdk_screen_get_display (acme->current_screen));
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_unknown_action (Acme *acme, const char *url)
|
|
|
|
{
|
2007-03-29 18:47:28 +00:00
|
|
|
char *string;
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
g_return_if_fail (url != NULL);
|
|
|
|
|
|
|
|
string = gconf_client_get_string (acme->conf_client,
|
2007-06-21 12:19:06 +00:00
|
|
|
"/desktop/gnome/url-handlers/unknown/command",
|
|
|
|
NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
if ((string != NULL) && (strcmp (string, "") != 0)) {
|
|
|
|
gchar *cmd;
|
|
|
|
cmd = g_strdup_printf (string, url);
|
|
|
|
execute (acme, cmd, FALSE, FALSE);
|
|
|
|
g_free (cmd);
|
|
|
|
}
|
2004-01-13 15:59:09 +00:00
|
|
|
g_free (string);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_help_action (Acme *acme)
|
|
|
|
{
|
2007-03-29 18:47:28 +00:00
|
|
|
char *string;
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
string = gconf_client_get_string (acme->conf_client,
|
2007-06-21 12:19:06 +00:00
|
|
|
"/desktop/gnome/url-handlers/ghelp/command",
|
|
|
|
NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
if ((string != NULL) && (strcmp (string, "") != 0)) {
|
|
|
|
gchar *cmd;
|
|
|
|
cmd = g_strdup_printf (string, "");
|
|
|
|
execute (acme, cmd, FALSE, FALSE);
|
|
|
|
g_free (cmd);
|
2007-07-01 15:56:19 +00:00
|
|
|
} else
|
2004-01-13 15:59:09 +00:00
|
|
|
do_unknown_action (acme, "ghelp:");
|
|
|
|
|
|
|
|
g_free (string);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_mail_action (Acme *acme)
|
|
|
|
{
|
2007-03-29 18:47:28 +00:00
|
|
|
char *string;
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
string = gconf_client_get_string (acme->conf_client,
|
2007-06-21 12:19:06 +00:00
|
|
|
"/desktop/gnome/url-handlers/mailto/command",
|
|
|
|
NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
if ((string != NULL) && (strcmp (string, "") != 0)) {
|
|
|
|
gchar *cmd;
|
|
|
|
cmd = g_strdup_printf (string, "");
|
2007-06-21 12:19:06 +00:00
|
|
|
execute (acme, cmd, FALSE,
|
|
|
|
gconf_client_get_bool (acme->conf_client,
|
|
|
|
"/desktop/gnome/url-handlers/mailto/needs_terminal", NULL));
|
2007-03-29 18:47:28 +00:00
|
|
|
g_free (cmd);
|
|
|
|
}
|
2004-01-13 15:59:09 +00:00
|
|
|
g_free (string);
|
|
|
|
}
|
|
|
|
|
2007-03-20 19:01:26 +00:00
|
|
|
static void
|
|
|
|
do_media_action (Acme *acme)
|
|
|
|
{
|
|
|
|
char *command;
|
2007-03-29 18:47:28 +00:00
|
|
|
|
2007-03-20 19:01:26 +00:00
|
|
|
command = gconf_client_get_string (acme->conf_client,
|
2007-03-29 18:47:28 +00:00
|
|
|
"/desktop/gnome/applications/media/exec", NULL);
|
|
|
|
if ((command != NULL) && (strcmp (command, "") != 0)) {
|
|
|
|
execute (acme, command, FALSE, gconf_client_get_bool (acme->conf_client,
|
|
|
|
"/desktop/gnome/applications/media/needs_term", NULL));
|
|
|
|
}
|
2007-03-20 19:01:26 +00:00
|
|
|
g_free (command);
|
|
|
|
}
|
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
static void
|
|
|
|
do_www_action (Acme *acme, const char *url)
|
|
|
|
{
|
2007-03-29 18:47:28 +00:00
|
|
|
char *string;
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
string = gconf_client_get_string (acme->conf_client,
|
2007-06-21 12:19:06 +00:00
|
|
|
"/desktop/gnome/url-handlers/http/command",
|
|
|
|
NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
if ((string != NULL) && (strcmp (string, "") != 0)) {
|
|
|
|
gchar *cmd;
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
if (url == NULL)
|
|
|
|
cmd = g_strdup_printf (string, "");
|
|
|
|
else
|
|
|
|
cmd = g_strdup_printf (string, url);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-03-29 18:47:28 +00:00
|
|
|
execute (acme, cmd, FALSE, gconf_client_get_bool (acme->conf_client,
|
|
|
|
"/desktop/gnome/url-handlers/http/needs_terminal", NULL));
|
|
|
|
g_free (cmd);
|
|
|
|
} else {
|
|
|
|
do_unknown_action (acme, url ? url : "");
|
|
|
|
}
|
2004-01-13 15:59:09 +00:00
|
|
|
g_free (string);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_exit_action (Acme *acme)
|
|
|
|
{
|
2007-03-29 18:47:28 +00:00
|
|
|
execute (acme, "gnome-session-save --kill", FALSE, FALSE);
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_eject_action (Acme *acme)
|
|
|
|
{
|
|
|
|
char *command;
|
|
|
|
|
2004-03-24 02:58:55 +00:00
|
|
|
dialog_init (acme);
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
gsd_media_keys_window_set_action (GSD_MEDIA_KEYS_WINDOW (acme->dialog),
|
|
|
|
GSD_MEDIA_KEYS_WINDOW_ACTION_EJECT);
|
2004-01-13 15:59:09 +00:00
|
|
|
dialog_show (acme);
|
|
|
|
|
|
|
|
command = gconf_client_get_string (acme->conf_client,
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
GCONF_MISC_DIR "/eject_command", NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
if ((command != NULL) && (strcmp (command, "") != 0))
|
2007-03-29 18:47:28 +00:00
|
|
|
execute (acme, command, FALSE, FALSE);
|
2004-01-13 15:59:09 +00:00
|
|
|
else
|
2007-05-13 13:09:25 +00:00
|
|
|
execute (acme, "eject -T", FALSE, FALSE);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2006-05-24 13:46:23 +00:00
|
|
|
g_free (command);
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
do_sound_action (Acme *acme, int type)
|
|
|
|
{
|
|
|
|
gboolean muted;
|
|
|
|
int vol;
|
|
|
|
int vol_step;
|
|
|
|
|
|
|
|
if (acme->volobj == NULL)
|
|
|
|
return;
|
|
|
|
|
|
|
|
vol_step = gconf_client_get_int (acme->conf_client,
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
GCONF_MISC_DIR "/volume_step", NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
if (vol_step == 0)
|
|
|
|
vol_step = VOLUME_STEP;
|
|
|
|
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
/* FIXME: this is racy */
|
2004-01-13 15:59:09 +00:00
|
|
|
vol = acme_volume_get_volume (acme->volobj);
|
|
|
|
muted = acme_volume_get_mute (acme->volobj);
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
case MUTE_KEY:
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
acme_volume_mute_toggle (acme->volobj);
|
2004-01-13 15:59:09 +00:00
|
|
|
break;
|
|
|
|
case VOLUME_DOWN_KEY:
|
2007-07-01 16:45:33 +00:00
|
|
|
if (!muted && (vol <= vol_step))
|
|
|
|
acme_volume_mute_toggle (acme->volobj);
|
|
|
|
acme_volume_set_volume (acme->volobj, vol - vol_step);
|
2004-01-13 15:59:09 +00:00
|
|
|
break;
|
|
|
|
case VOLUME_UP_KEY:
|
2007-06-21 12:19:06 +00:00
|
|
|
if (muted) {
|
2004-01-13 15:59:09 +00:00
|
|
|
acme_volume_mute_toggle(acme->volobj);
|
|
|
|
} else {
|
|
|
|
acme_volume_set_volume (acme->volobj, vol + vol_step);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
muted = acme_volume_get_mute (acme->volobj);
|
2004-01-13 15:59:09 +00:00
|
|
|
vol = acme_volume_get_volume (acme->volobj);
|
2004-03-24 02:58:55 +00:00
|
|
|
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
/* FIXME: AcmeVolume should probably emit signals
|
|
|
|
instead of doing it like this */
|
|
|
|
dialog_init (acme);
|
|
|
|
gsd_media_keys_window_set_volume_muted (GSD_MEDIA_KEYS_WINDOW (acme->dialog),
|
|
|
|
muted);
|
|
|
|
gsd_media_keys_window_set_volume_level (GSD_MEDIA_KEYS_WINDOW (acme->dialog),
|
|
|
|
vol);
|
|
|
|
gsd_media_keys_window_set_action (GSD_MEDIA_KEYS_WINDOW (acme->dialog),
|
|
|
|
GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME);
|
2004-01-13 15:59:09 +00:00
|
|
|
dialog_show (acme);
|
|
|
|
}
|
|
|
|
|
2007-02-09 16:59:35 +00:00
|
|
|
static gboolean
|
2007-01-08 16:48:19 +00:00
|
|
|
do_multimedia_player_action (Acme *acme, const gchar *key)
|
|
|
|
{
|
2007-02-09 16:59:35 +00:00
|
|
|
return gnome_settings_server_media_player_key_pressed (acme->server, key);
|
2007-01-08 16:48:19 +00:00
|
|
|
}
|
|
|
|
|
2007-02-09 16:59:35 +00:00
|
|
|
static gboolean
|
2004-03-24 02:58:55 +00:00
|
|
|
do_action (Acme *acme, int type)
|
2004-01-13 15:59:09 +00:00
|
|
|
{
|
2005-07-25 11:55:59 +00:00
|
|
|
gchar *cmd;
|
2007-06-11 09:06:15 +00:00
|
|
|
gchar *path;
|
2005-07-25 11:55:59 +00:00
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
switch (type) {
|
|
|
|
case MUTE_KEY:
|
|
|
|
case VOLUME_DOWN_KEY:
|
|
|
|
case VOLUME_UP_KEY:
|
|
|
|
do_sound_action (acme, type);
|
|
|
|
break;
|
|
|
|
case POWER_KEY:
|
|
|
|
do_exit_action (acme);
|
|
|
|
break;
|
|
|
|
case EJECT_KEY:
|
|
|
|
do_eject_action (acme);
|
|
|
|
break;
|
|
|
|
case HOME_KEY:
|
2007-06-11 09:06:15 +00:00
|
|
|
path = g_shell_quote (g_get_home_dir ());
|
|
|
|
cmd = g_strconcat ("nautilus ", path, NULL);
|
|
|
|
g_free (path);
|
|
|
|
execute (acme, cmd, FALSE, FALSE);
|
|
|
|
g_free (cmd);
|
2004-01-13 15:59:09 +00:00
|
|
|
break;
|
|
|
|
case SEARCH_KEY:
|
2007-03-29 18:47:28 +00:00
|
|
|
execute (acme, "gnome-search-tool", FALSE, FALSE);
|
2004-01-13 15:59:09 +00:00
|
|
|
break;
|
|
|
|
case EMAIL_KEY:
|
|
|
|
do_mail_action (acme);
|
|
|
|
break;
|
|
|
|
case SLEEP_KEY:
|
|
|
|
do_sleep_action ("apm", "xset dpms force off");
|
|
|
|
break;
|
|
|
|
case SCREENSAVER_KEY:
|
2005-07-25 11:55:59 +00:00
|
|
|
if ((cmd = g_find_program_in_path ("gnome-screensaver-command")))
|
2007-03-29 18:47:28 +00:00
|
|
|
execute (acme, "gnome-screensaver-command --lock", FALSE, FALSE);
|
2005-07-25 11:55:59 +00:00
|
|
|
else
|
2007-03-29 18:47:28 +00:00
|
|
|
execute (acme, "xscreensaver-command -lock", FALSE, FALSE);
|
2005-07-25 11:55:59 +00:00
|
|
|
|
|
|
|
g_free (cmd);
|
2004-01-13 15:59:09 +00:00
|
|
|
break;
|
|
|
|
case HELP_KEY:
|
|
|
|
do_help_action (acme);
|
|
|
|
break;
|
|
|
|
case WWW_KEY:
|
|
|
|
do_www_action (acme, NULL);
|
|
|
|
break;
|
2007-03-20 19:01:26 +00:00
|
|
|
case MEDIA_KEY:
|
|
|
|
do_media_action (acme);
|
|
|
|
break;
|
2007-01-08 16:48:19 +00:00
|
|
|
case PLAY_KEY:
|
2007-02-09 16:59:35 +00:00
|
|
|
return do_multimedia_player_action (acme, "Play");
|
2007-01-08 16:48:19 +00:00
|
|
|
break;
|
|
|
|
case PAUSE_KEY:
|
2007-02-09 16:59:35 +00:00
|
|
|
return do_multimedia_player_action (acme, "Pause");
|
2007-01-08 16:48:19 +00:00
|
|
|
break;
|
|
|
|
case STOP_KEY:
|
2007-02-09 16:59:35 +00:00
|
|
|
return do_multimedia_player_action (acme, "Stop");
|
2007-01-08 16:48:19 +00:00
|
|
|
break;
|
|
|
|
case PREVIOUS_KEY:
|
2007-02-09 16:59:35 +00:00
|
|
|
return do_multimedia_player_action (acme, "Previous");
|
2007-01-08 16:48:19 +00:00
|
|
|
break;
|
|
|
|
case NEXT_KEY:
|
2007-02-09 16:59:35 +00:00
|
|
|
return do_multimedia_player_action (acme, "Next");
|
2007-01-08 16:48:19 +00:00
|
|
|
break;
|
2004-01-13 15:59:09 +00:00
|
|
|
default:
|
|
|
|
g_assert_not_reached ();
|
|
|
|
}
|
2007-02-09 16:59:35 +00:00
|
|
|
|
|
|
|
return FALSE;
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|
2004-01-14 00:22:55 +00:00
|
|
|
static GdkScreen *
|
|
|
|
acme_get_screen_from_event (Acme *acme, XAnyEvent *xanyev)
|
2004-01-13 15:59:09 +00:00
|
|
|
{
|
2004-01-14 00:22:55 +00:00
|
|
|
GdkWindow *window;
|
|
|
|
GdkScreen *screen;
|
2004-01-13 15:59:09 +00:00
|
|
|
GSList *l;
|
|
|
|
|
|
|
|
/* Look for which screen we're receiving events */
|
2007-06-21 12:19:06 +00:00
|
|
|
for (l = acme->screens; l != NULL; l = l->next) {
|
2004-01-13 15:59:09 +00:00
|
|
|
screen = (GdkScreen *) l->data;
|
|
|
|
window = gdk_screen_get_root_window (screen);
|
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
if (GDK_WINDOW_XID (window) == xanyev->window) {
|
2004-01-14 00:22:55 +00:00
|
|
|
return screen;
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-14 00:22:55 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static GdkFilterReturn
|
|
|
|
acme_filter_events (GdkXEvent *xevent, GdkEvent *event, gpointer data)
|
|
|
|
{
|
|
|
|
Acme *acme = (Acme *) data;
|
|
|
|
XEvent *xev = (XEvent *) xevent;
|
|
|
|
XAnyEvent *xanyev = (XAnyEvent *) xevent;
|
|
|
|
guint keycode, state;
|
|
|
|
int i;
|
|
|
|
|
2007-01-31 17:31:43 +00:00
|
|
|
/* verify we have a key event */
|
|
|
|
if (xev->xany.type != KeyPress &&
|
|
|
|
xev->xany.type != KeyRelease)
|
|
|
|
return GDK_FILTER_CONTINUE;
|
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
keycode = xev->xkey.keycode;
|
|
|
|
state = xev->xkey.state;
|
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
for (i = 0; i < HANDLED_KEYS; i++) {
|
2004-01-13 15:59:09 +00:00
|
|
|
if (keys[i].key == NULL)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (keys[i].key->keycode == keycode &&
|
2007-06-21 12:19:06 +00:00
|
|
|
(state & USED_MODS) == keys[i].key->state) {
|
2004-01-13 15:59:09 +00:00
|
|
|
switch (keys[i].key_type) {
|
|
|
|
case VOLUME_DOWN_KEY:
|
|
|
|
case VOLUME_UP_KEY:
|
|
|
|
/* auto-repeatable keys */
|
|
|
|
if (xev->type != KeyPress)
|
|
|
|
return GDK_FILTER_CONTINUE;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
if (xev->type != KeyRelease)
|
|
|
|
return GDK_FILTER_CONTINUE;
|
|
|
|
}
|
|
|
|
|
2004-01-14 00:22:55 +00:00
|
|
|
acme->current_screen = acme_get_screen_from_event
|
|
|
|
(acme, xanyev);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-02-09 16:59:35 +00:00
|
|
|
if (do_action (acme, keys[i].key_type) == FALSE)
|
|
|
|
return GDK_FILTER_REMOVE;
|
|
|
|
else
|
|
|
|
return GDK_FILTER_CONTINUE;
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return GDK_FILTER_CONTINUE;
|
|
|
|
}
|
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
static gboolean
|
|
|
|
gnome_settings_module_multimedia_keys_initialize (GnomeSettingsModule *module, GConfClient *client)
|
2004-01-13 15:59:09 +00:00
|
|
|
{
|
2007-06-21 12:19:06 +00:00
|
|
|
return TRUE;
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
static gboolean
|
|
|
|
gnome_settings_module_multimedia_keys_start (GnomeSettingsModule *module)
|
2004-01-13 15:59:09 +00:00
|
|
|
{
|
|
|
|
GSList *l;
|
2004-03-24 02:58:55 +00:00
|
|
|
Acme *acme;
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2004-03-24 02:58:55 +00:00
|
|
|
acme = g_new0 (Acme, 1);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
2007-06-21 12:19:06 +00:00
|
|
|
acme->conf_client = gnome_settings_module_get_config_client (module);
|
2004-01-13 15:59:09 +00:00
|
|
|
gconf_client_add_dir (acme->conf_client,
|
Add a new media keys window that takes advantage of compositing when
2006-12-07 William Jon McCann <mccann@jhu.edu>
* gnome-settings-daemon/Makefile.am:
* gnome-settings-daemon/actions/Makefile.am:
* gnome-settings-daemon/actions/acme.glade:
* gnome-settings-daemon/actions/gnome-speakernotes-muted.png:
* gnome-settings-daemon/actions/gnome-speakernotes.png:
* gnome-settings-daemon/gnome-settings-multimedia-keys.c:
(execute), (dialog_init), (unhookup_keysym), (update_kbd_cb),
(init_kbd), (dialog_show), (do_eject_action), (do_sound_action),
(gnome_settings_multimedia_keys_load):
* gnome-settings-daemon/gsd-media-keys-window.c: (hide_timeout),
(remove_hide_timeout), (add_hide_timeout), (update_window),
(volume_controls_set_visible), (window_set_icon_name),
(window_set_icon_file), (action_changed), (volume_level_changed),
(volume_muted_changed), (gsd_media_keys_window_set_action),
(gsd_media_keys_window_set_volume_muted),
(gsd_media_keys_window_set_volume_level), (curved_rectangle),
(draw_action_eject), (draw_waves), (draw_speaker),
(draw_volume_boxes), (draw_action_volume), (draw_action),
(on_expose_event), (gsd_media_keys_window_real_show),
(gsd_media_keys_window_real_hide),
(gsd_media_keys_window_class_init), (initialize_alpha_mode),
(gsd_media_keys_window_init), (gsd_media_keys_window_finalize),
(gsd_media_keys_window_new):
* gnome-settings-daemon/gsd-media-keys-window.h:
Add a new media keys window that takes advantage of
compositing when available. Fixes #383066
2006-12-07 17:54:56 +00:00
|
|
|
GCONF_BINDING_DIR,
|
|
|
|
GCONF_CLIENT_PRELOAD_ONELEVEL,
|
|
|
|
NULL);
|
2004-01-13 15:59:09 +00:00
|
|
|
|
|
|
|
init_screens (acme);
|
|
|
|
init_kbd (acme);
|
|
|
|
|
2007-01-08 16:48:19 +00:00
|
|
|
acme->server = gnome_settings_server_get ();
|
|
|
|
|
2004-01-13 15:59:09 +00:00
|
|
|
/* initialise Volume handler */
|
|
|
|
acme->volobj = acme_volume_new();
|
|
|
|
|
|
|
|
/* Start filtering the events */
|
|
|
|
for (l = acme->screens; l != NULL; l = l->next)
|
2004-03-24 02:58:55 +00:00
|
|
|
gdk_window_add_filter (gdk_screen_get_root_window (l->data),
|
|
|
|
acme_filter_events, (gpointer) acme);
|
2007-06-21 12:19:06 +00:00
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
gnome_settings_module_multimedia_keys_stop (GnomeSettingsModule *module)
|
|
|
|
{
|
|
|
|
return TRUE;
|
2004-01-13 15:59:09 +00:00
|
|
|
}
|
|
|
|
|