Skip to content

Commit 2d3406f

Browse files
vkarehraveit65
authored and
raveit65
committed
workspace-switcher: provide themed fallback color
When a theme does not specify a color for the highlighted workspace, we can look it up from the current theme and provide that as a fallback color. Fixes #807
1 parent 07eb418 commit 2d3406f

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

Diff for: applets/wncklet/workspace-switcher.c

+22-11
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,27 @@ static void applet_change_background(MatePanelApplet* applet, MatePanelAppletBac
248248
type == PANEL_NO_BACKGROUND ? GTK_SHADOW_NONE : GTK_SHADOW_IN);
249249
}
250250

251+
static void applet_style_updated (MatePanelApplet *applet, GtkStyleContext *context)
252+
{
253+
GtkCssProvider *provider;
254+
GdkRGBA color;
255+
256+
provider = gtk_css_provider_new ();
257+
258+
/* Provide a fallback color for the highlighted workspace based on the current theme */
259+
gtk_style_context_lookup_color (context, "theme_selected_bg_color", &color);
260+
gchar *bg_css = g_strconcat (".wnck-pager:selected {\n"
261+
" background-color:", gdk_rgba_to_string (&color), ";\n"
262+
"}", NULL);
263+
gtk_css_provider_load_from_data (provider, bg_css, -1, NULL);
264+
g_free (bg_css);
265+
266+
gtk_style_context_add_provider (context,
267+
GTK_STYLE_PROVIDER (provider),
268+
GTK_STYLE_PROVIDER_PRIORITY_FALLBACK);
269+
g_object_unref (provider);
270+
}
271+
251272
/* Replacement for the default scroll handler that also cares about the wrapping property.
252273
* Alternative: Add behaviour to libwnck (to the WnckPager widget).
253274
*/
@@ -493,7 +514,6 @@ gboolean workspace_switcher_applet_fill(MatePanelApplet* applet)
493514
PagerData* pager;
494515
GtkActionGroup* action_group;
495516
gboolean display_names;
496-
GtkCssProvider *provider;
497517

498518
pager = g_new0(PagerData, 1);
499519

@@ -546,16 +566,6 @@ gboolean workspace_switcher_applet_fill(MatePanelApplet* applet)
546566
context = gtk_widget_get_style_context (pager->pager);
547567
gtk_style_context_add_class (context, "wnck-pager");
548568

549-
provider = gtk_css_provider_new ();
550-
gtk_css_provider_load_from_data (provider,
551-
".wnck-pager:selected {\n"
552-
"background-color: #4A90D9; }",
553-
-1, NULL);
554-
gtk_style_context_add_provider (context,
555-
GTK_STYLE_PROVIDER (provider),
556-
GTK_STYLE_PROVIDER_PRIORITY_FALLBACK);
557-
g_object_unref (provider);
558-
559569
g_signal_connect(G_OBJECT(pager->pager), "destroy", G_CALLBACK(destroy_pager), pager);
560570

561571
/* overwrite default WnckPager widget scroll-event */
@@ -567,6 +577,7 @@ gboolean workspace_switcher_applet_fill(MatePanelApplet* applet)
567577
g_signal_connect(G_OBJECT(pager->applet), "unrealize", G_CALLBACK(applet_unrealized), pager);
568578
g_signal_connect(G_OBJECT(pager->applet), "change_orient", G_CALLBACK(applet_change_orient), pager);
569579
g_signal_connect(G_OBJECT(pager->applet), "change_background", G_CALLBACK(applet_change_background), pager);
580+
g_signal_connect(G_OBJECT(pager->applet), "style-updated", G_CALLBACK(applet_style_updated), context);
570581

571582
gtk_widget_show(pager->pager);
572583
gtk_widget_show(pager->applet);

0 commit comments

Comments
 (0)