summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2011-06-10 13:48:58 +0100
committerBastien Nocera <hadess@hadess.net>2011-06-10 14:08:16 +0100
commit5a8f80dc8d2a5ca755b0cc1c53ed489ce22ed1e7 (patch)
tree0be6cc1ca95f99ee3157185afb5dfb08eed54d6f
parentb3ef8907d58ee094c6fb2bdda3297936ddd2a679 (diff)
downloadgnome-settings-daemon-5a8f80dc8d2a5ca755b0cc1c53ed489ce22ed1e7.tar.gz
media-keys: Remove old-style OSD
We now draw all the time with cairo, and make the border square when we don't have compositing.
-rw-r--r--plugins/media-keys/Makefile.am6
-rw-r--r--plugins/media-keys/acme.ui33
-rw-r--r--plugins/media-keys/gsd-media-keys-window.c131
-rw-r--r--plugins/media-keys/gsd-osd-window.c65
4 files changed, 43 insertions, 192 deletions
diff --git a/plugins/media-keys/Makefile.am b/plugins/media-keys/Makefile.am
index 6cc3a1ae..36077257 100644
--- a/plugins/media-keys/Makefile.am
+++ b/plugins/media-keys/Makefile.am
@@ -183,17 +183,11 @@ if HAVE_PULSE
test_media_keys_LDADD += $(top_builddir)/plugins/media-keys/cut-n-paste/libgvc.la
endif
-gtkbuilderdir = $(pkgdatadir)
-gtkbuilder_DATA = \
- acme.ui \
- $(NULL)
-
DIST_SUBDIRS = cut-n-paste
EXTRA_DIST = \
gsd-marshal.list \
$(plugin_in_files) \
- $(gtkbuilder_DATA) \
$(pixmaps_DATA) \
touchpad-enabled-template.svg \
touchpad-disabled-template.svg \
diff --git a/plugins/media-keys/acme.ui b/plugins/media-keys/acme.ui
deleted file mode 100644
index e0457ed5..00000000
--- a/plugins/media-keys/acme.ui
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <!-- interface-requires gtk+ 2.6 -->
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkWindow" id="dialog">
- <child>
- <object class="GtkVBox" id="acme_box">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="acme_image">
- <property name="visible">True</property>
- <property name="icon_name">audio-volume-high</property>
- <property name="icon-size">6</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkProgressBar" id="acme_volume_progressbar">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
-</interface>
diff --git a/plugins/media-keys/gsd-media-keys-window.c b/plugins/media-keys/gsd-media-keys-window.c
index 01cf5e04..c74e2f8b 100644
--- a/plugins/media-keys/gsd-media-keys-window.c
+++ b/plugins/media-keys/gsd-media-keys-window.c
@@ -42,63 +42,41 @@ struct GsdMediaKeysWindowPrivate
guint volume_muted : 1;
int volume_level;
-
- GtkImage *image;
- GtkWidget *progress;
};
G_DEFINE_TYPE (GsdMediaKeysWindow, gsd_media_keys_window, GSD_TYPE_OSD_WINDOW)
-static void
-volume_controls_set_visible (GsdMediaKeysWindow *window,
- gboolean visible)
+static const char *
+get_image_name_for_volume (gboolean muted,
+ int volume)
{
- if (window->priv->progress == NULL)
- return;
+ static const char *icon_names[] = {
+ "audio-volume-muted-symbolic",
+ "audio-volume-low-symbolic",
+ "audio-volume-medium-symbolic",
+ "audio-volume-high-symbolic",
+ NULL
+ };
+ int n;
- if (visible) {
- gtk_widget_show (window->priv->progress);
+ if (muted) {
+ n = 0;
} else {
- gtk_widget_hide (window->priv->progress);
+ /* select image */
+ n = 3 * volume / 100 + 1;
+ if (n < 1) {
+ n = 1;
+ } else if (n > 3) {
+ n = 3;
+ }
}
-}
-static void
-window_set_icon_name (GsdMediaKeysWindow *window,
- const char *name)
-{
- if (window->priv->image == NULL)
- return;
-
- gtk_image_set_from_icon_name (window->priv->image,
- name, GTK_ICON_SIZE_DIALOG);
+ return icon_names[n];
}
static void
action_changed (GsdMediaKeysWindow *window)
{
- if (!gsd_osd_window_is_composited (GSD_OSD_WINDOW (window))) {
- switch (window->priv->action) {
- case GSD_MEDIA_KEYS_WINDOW_ACTION_VOLUME:
- volume_controls_set_visible (window, TRUE);
-
- if (window->priv->volume_muted) {
- window_set_icon_name (window, "audio-volume-muted-symbolic");
- } else {
- window_set_icon_name (window, "audio-volume-high-symbolic");
- }
-
- break;
- case GSD_MEDIA_KEYS_WINDOW_ACTION_CUSTOM:
- volume_controls_set_visible (window, window->priv->show_level);
- window_set_icon_name (window, window->priv->icon_name);
- break;
- default:
- g_assert_not_reached ();
- break;
- }
- }
-
gsd_osd_window_update_and_hide (GSD_OSD_WINDOW (window));
}
@@ -106,29 +84,12 @@ static void
volume_level_changed (GsdMediaKeysWindow *window)
{
gsd_osd_window_update_and_hide (GSD_OSD_WINDOW (window));
-
- if (!gsd_osd_window_is_composited (GSD_OSD_WINDOW (window)) && window->priv->progress != NULL) {
- double fraction;
-
- fraction = (double) window->priv->volume_level / 100.0;
-
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (window->priv->progress),
- fraction);
- }
}
static void
volume_muted_changed (GsdMediaKeysWindow *window)
{
gsd_osd_window_update_and_hide (GSD_OSD_WINDOW (window));
-
- if (!gsd_osd_window_is_composited (GSD_OSD_WINDOW (window))) {
- if (window->priv->volume_muted) {
- window_set_icon_name (window, "audio-volume-muted-symbolic");
- } else {
- window_set_icon_name (window, "audio-volume-high-symbolic");
- }
- }
}
void
@@ -372,31 +333,15 @@ render_speaker (GsdMediaKeysWindow *window,
double height)
{
GdkPixbuf *pixbuf;
+ const char *icon_name;
int icon_size;
- int n;
- static const char *icon_names[] = {
- "audio-volume-muted-symbolic",
- "audio-volume-low-symbolic",
- "audio-volume-medium-symbolic",
- "audio-volume-high-symbolic",
- NULL
- };
- if (window->priv->volume_muted) {
- n = 0;
- } else {
- /* select image */
- n = 3 * window->priv->volume_level / 100 + 1;
- if (n < 1) {
- n = 1;
- } else if (n > 3) {
- n = 3;
- }
- }
+ icon_name = get_image_name_for_volume (window->priv->volume_muted,
+ window->priv->volume_level);
icon_size = (int)width;
- pixbuf = load_pixbuf (window, icon_names[n], icon_size);
+ pixbuf = load_pixbuf (window, icon_name, icon_size);
if (pixbuf == NULL) {
return FALSE;
@@ -694,32 +639,6 @@ static void
gsd_media_keys_window_init (GsdMediaKeysWindow *window)
{
window->priv = GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE (window);
-
- if (!gsd_osd_window_is_composited (GSD_OSD_WINDOW (window))) {
- GtkBuilder *builder;
- const gchar *objects[] = {"acme_box", NULL};
- GtkWidget *box;
-
- builder = gtk_builder_new ();
- gtk_builder_add_objects_from_file (builder,
- GTKBUILDERDIR "/acme.ui",
- (char **) objects,
- NULL);
-
- window->priv->image = GTK_IMAGE (gtk_builder_get_object (builder, "acme_image"));
- g_object_set (G_OBJECT (window->priv->image), "use-fallback", TRUE, NULL);
- window->priv->progress = GTK_WIDGET (gtk_builder_get_object (builder, "acme_volume_progressbar"));
- box = GTK_WIDGET (gtk_builder_get_object (builder, "acme_box"));
-
- if (box != NULL) {
- gtk_container_add (GTK_CONTAINER (window), box);
- gtk_widget_show_all (box);
- }
-
- /* The builder needs to stay alive until the window
- takes ownership of the box (and its children) */
- g_object_unref (builder);
- }
}
GtkWidget *
diff --git a/plugins/media-keys/gsd-osd-window.c b/plugins/media-keys/gsd-osd-window.c
index db52c1a6..60dfa115 100644
--- a/plugins/media-keys/gsd-osd-window.c
+++ b/plugins/media-keys/gsd-osd-window.c
@@ -422,6 +422,7 @@ draw_when_composited (GtkWidget *widget, cairo_t *orig_cr)
int height;
GtkStyleContext *context;
GdkRGBA acolor;
+ gdouble corner_radius;
window = GSD_OSD_WINDOW (widget);
@@ -447,7 +448,11 @@ draw_when_composited (GtkWidget *widget, cairo_t *orig_cr)
cairo_paint (cr);
/* draw a box */
- gsd_osd_window_draw_rounded_rectangle (cr, 1.0, 0.5, 0.5, height / 10, width-1, height-1);
+ if (window->priv->is_composited)
+ corner_radius = height / 10;
+ else
+ corner_radius = 0.0;
+ gsd_osd_window_draw_rounded_rectangle (cr, 1.0, 0.5, 0.5, corner_radius, width-1, height-1);
gtk_style_context_get_background_color (context, GTK_STATE_NORMAL, &acolor);
gsd_osd_window_color_reverse (&acolor);
acolor.alpha = BG_ALPHA;
@@ -480,32 +485,6 @@ draw_when_composited (GtkWidget *widget, cairo_t *orig_cr)
}
}
-/* This is our draw handler when the window is *not* in a compositing manager.
- * We just draw a rectangular frame by hand. We do this with hardcoded drawing code,
- * instead of GtkFrame, to avoid changing the window's internal widget hierarchy: in
- * either case (composited or non-composited), callers can assume that this works
- * identically to a GtkWindow without any intermediate widgetry.
- */
-static void
-draw_when_not_composited (GtkWidget *widget, cairo_t *cr)
-{
- GtkStyleContext *context;
- int width;
- int height;
-
- width = gtk_widget_get_allocated_width (widget);
- height = gtk_widget_get_allocated_width (widget);
- context = gtk_widget_get_style_context (widget);
-
- gtk_style_context_set_state (context, GTK_STATE_FLAG_ACTIVE);
- gtk_render_frame (context,
- cr,
- 0,
- 0,
- width,
- height);
-}
-
static gboolean
gsd_osd_window_draw (GtkWidget *widget,
cairo_t *cr)
@@ -515,10 +494,7 @@ gsd_osd_window_draw (GtkWidget *widget,
window = GSD_OSD_WINDOW (widget);
- if (window->priv->is_composited)
- draw_when_composited (widget, cr);
- else
- draw_when_not_composited (widget, cr);
+ draw_when_composited (widget, cr);
child = gtk_bin_get_child (GTK_BIN (window));
if (child)
@@ -721,6 +697,8 @@ static void
gsd_osd_window_init (GsdOsdWindow *window)
{
GdkScreen *screen;
+ gdouble scalew, scaleh, scale;
+ gint size;
window->priv = GSD_OSD_WINDOW_GET_PRIVATE (window);
@@ -730,25 +708,18 @@ gsd_osd_window_init (GsdOsdWindow *window)
window->priv->screen_width = gdk_screen_get_width (screen);
window->priv->screen_height = gdk_screen_get_height (screen);
- if (window->priv->is_composited) {
- gdouble scalew, scaleh, scale;
- gint size;
+ gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
+ gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
- gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
- gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
+ /* assume 130x130 on a 640x480 display and scale from there */
+ scalew = gdk_screen_get_width (screen) / 640.0;
+ scaleh = gdk_screen_get_height (screen) / 480.0;
+ scale = MIN (scalew, scaleh);
+ size = 130 * MAX (1, scale);
- /* assume 130x130 on a 640x480 display and scale from there */
- scalew = gdk_screen_get_width (screen) / 640.0;
- scaleh = gdk_screen_get_height (screen) / 480.0;
- scale = MIN (scalew, scaleh);
- size = 130 * MAX (1, scale);
+ gtk_window_set_default_size (GTK_WINDOW (window), size, size);
- gtk_window_set_default_size (GTK_WINDOW (window), size, size);
-
- window->priv->fade_out_alpha = 1.0;
- } else {
- gtk_container_set_border_width (GTK_CONTAINER (window), 12);
- }
+ window->priv->fade_out_alpha = 1.0;
}
GtkWidget *