mirror of
https://git.freebsd.org/ports.git
synced 2025-05-16 01:01:49 -04:00
- Add LICENSE - Sort USES - Switch to optional extra build target - Backport support of Gtk3 < 3.20
148 lines
6.7 KiB
C
148 lines
6.7 KiB
C
--- panel-plugin/fsguard.c.orig 2016-10-29 06:43:10 UTC
|
|
+++ panel-plugin/fsguard.c
|
|
@@ -70,6 +70,7 @@ typedef struct
|
|
XfcePanelPlugin *plugin;
|
|
gboolean seen;
|
|
gint icon_id;
|
|
+ gchar *css_class;
|
|
gint timeout;
|
|
guint limit_warning;
|
|
guint limit_urgent;
|
|
@@ -135,6 +136,7 @@ fsguard_set_icon (FsGuard *fsguard, gint
|
|
if (id == fsguard->icon_id)
|
|
return;
|
|
|
|
+ DBG ("icon id: new=%d, cur=%d", id, fsguard->icon_id);
|
|
fsguard->icon_id = id;
|
|
size = xfce_panel_plugin_get_size (fsguard->plugin);
|
|
size /= xfce_panel_plugin_get_nrows (fsguard->plugin);
|
|
@@ -177,7 +179,7 @@ fsguard_refresh_icon (FsGuard *fsguard)
|
|
}
|
|
|
|
static void
|
|
-fsguard_refresh_monitor (FsGuard *fsguard)
|
|
+fsguard_refresh_monitor_color (FsGuard *fsguard, gchar *css_class)
|
|
{
|
|
GdkRGBA color;
|
|
|
|
@@ -197,23 +199,15 @@ fsguard_refresh_monitor (FsGuard *fsguar
|
|
}
|
|
|
|
#if GTK_CHECK_VERSION (3, 16, 0)
|
|
- GtkCssProvider *css_provider;
|
|
-#if GTK_CHECK_VERSION (3, 20, 0)
|
|
- gchar * css = g_strdup_printf("progressbar trough { min-width: 4px; min-height: 4px; } \
|
|
- progressbar progress { min-width: 4px; min-height: 4px; \
|
|
- background-color: %s; background-image: none; }",
|
|
-#else
|
|
- gchar * css = g_strdup_printf(".progressbar { background-color: %s; background-image: none; }",
|
|
-#endif
|
|
- gdk_rgba_to_string(&color));
|
|
- /* Setup Gtk style */
|
|
- css_provider = gtk_css_provider_new ();
|
|
- gtk_css_provider_load_from_data (css_provider, css, strlen(css), NULL);
|
|
- gtk_style_context_add_provider (
|
|
- GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (fsguard->progress_bar))),
|
|
- GTK_STYLE_PROVIDER (css_provider),
|
|
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
|
- g_free(css);
|
|
+ DBG("removing class %s, adding %s", fsguard->css_class, css_class);
|
|
+ gtk_style_context_remove_class (
|
|
+ GTK_STYLE_CONTEXT(gtk_widget_get_style_context (GTK_WIDGET (fsguard->progress_bar))),
|
|
+ fsguard->css_class);
|
|
+ gtk_style_context_add_class (
|
|
+ GTK_STYLE_CONTEXT(gtk_widget_get_style_context (GTK_WIDGET (fsguard->progress_bar))),
|
|
+ css_class);
|
|
+ g_free(fsguard->css_class);
|
|
+ fsguard->css_class = g_strdup(css_class);
|
|
#else
|
|
gtk_widget_override_background_color (GTK_WIDGET (fsguard->progress_bar),
|
|
GTK_STATE_PRELIGHT,
|
|
@@ -270,6 +264,7 @@ fsguard_check_fs (FsGuard *fsguard)
|
|
float totalblocks = 0;
|
|
long blocksize = 0;
|
|
int err;
|
|
+ gchar *css_class = "normal";
|
|
gchar msg_size[100], msg_total_size[100], msg[100];
|
|
gint icon_id = ICON_INSENSITIVE;
|
|
static struct statfs fsd;
|
|
@@ -285,10 +280,13 @@ fsguard_check_fs (FsGuard *fsguard)
|
|
|
|
if (freespace > (total * fsguard->limit_warning / 100)) {
|
|
icon_id = ICON_NORMAL;
|
|
+ css_class = "normal";
|
|
} else if (freespace > (total * fsguard->limit_urgent / 100) && freespace <= (total * fsguard->limit_warning / 100)) {
|
|
icon_id = ICON_WARNING;
|
|
+ css_class = "warning";
|
|
} else {
|
|
icon_id = ICON_URGENT;
|
|
+ css_class = "urgent";
|
|
}
|
|
}
|
|
g_snprintf (msg, sizeof (msg),
|
|
@@ -316,7 +314,8 @@ fsguard_check_fs (FsGuard *fsguard)
|
|
if (fsguard->show_progress_bar) {
|
|
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(fsguard->progress_bar),
|
|
(total > 0 ) ? 1.0 - (freespace / total) : 0.0);
|
|
- fsguard_refresh_monitor (fsguard);
|
|
+ if (icon_id != fsguard->icon_id)
|
|
+ fsguard_refresh_monitor_color (fsguard, css_class);
|
|
}
|
|
|
|
gtk_widget_set_tooltip_text(fsguard->ebox, msg);
|
|
@@ -347,6 +346,7 @@ fsguard_read_config (FsGuard *fsguard)
|
|
fsguard->name = g_strdup ("");
|
|
fsguard->show_name = FALSE;
|
|
fsguard->path = g_strdup ("/");
|
|
+ fsguard->css_class = g_strdup ("normal");
|
|
fsguard->show_size = TRUE;
|
|
fsguard->show_progress_bar = TRUE;
|
|
fsguard->hide_button = FALSE;
|
|
@@ -406,6 +406,9 @@ fsguard_write_config (XfcePanelPlugin *p
|
|
static FsGuard *
|
|
fsguard_new (XfcePanelPlugin *plugin)
|
|
{
|
|
+#if GTK_CHECK_VERSION (3, 16, 0)
|
|
+ GtkCssProvider *css_provider;
|
|
+#endif
|
|
FsGuard *fsguard = g_new0(FsGuard, 1);
|
|
|
|
fsguard->plugin = plugin;
|
|
@@ -429,6 +432,37 @@ fsguard_new (XfcePanelPlugin *plugin)
|
|
fsguard->icon_panel = gtk_image_new ();
|
|
|
|
fsguard->progress_bar = gtk_progress_bar_new ();
|
|
+#if GTK_CHECK_VERSION (3, 16, 0)
|
|
+ css_provider = gtk_css_provider_new ();
|
|
+#if GTK_CHECK_VERSION (3, 20, 0)
|
|
+ gtk_css_provider_load_from_data (css_provider, "\
|
|
+ progressbar.horizontal trough { min-height: 4px; }\
|
|
+ progressbar.horizontal progress { min-height: 4px; }\
|
|
+ progressbar.vertical trough { min-width: 4px; }\
|
|
+ progressbar.vertical progress { min-width: 4px; }\
|
|
+ .normal progress { background-color: " COLOR_NORMAL " ; background-image: none; }\
|
|
+ .warning progress { background-color: " COLOR_WARNING " ; background-image: none; }\
|
|
+ .urgent progress { background-color: " COLOR_URGENT " ; background-image: none; }",
|
|
+ -1, NULL);
|
|
+#else
|
|
+ gtk_css_provider_load_from_data (css_provider, "\
|
|
+ .progressbar.horizontal trough { min-height: 4px; }\
|
|
+ .progressbar.horizontal progress { min-height: 4px; }\
|
|
+ .progressbar.vertical trough { min-width: 4px; }\
|
|
+ .progressbar.vertical progress { min-width: 4px; }\
|
|
+ .normal progress { background-color: " COLOR_NORMAL " ; background-image: none; }\
|
|
+ .warning progress { background-color: " COLOR_WARNING " ; background-image: none; }\
|
|
+ .urgent progress { background-color: " COLOR_URGENT " ; background-image: none; }",
|
|
+ -1, NULL);
|
|
+#endif
|
|
+ gtk_style_context_add_provider (
|
|
+ GTK_STYLE_CONTEXT (gtk_widget_get_style_context (GTK_WIDGET (fsguard->progress_bar))),
|
|
+ GTK_STYLE_PROVIDER (css_provider),
|
|
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
|
+ gtk_style_context_add_class (
|
|
+ GTK_STYLE_CONTEXT(gtk_widget_get_style_context (GTK_WIDGET (fsguard->progress_bar))),
|
|
+ fsguard->css_class);
|
|
+#endif
|
|
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(fsguard->progress_bar), 0.0);
|
|
gtk_progress_bar_set_inverted (GTK_PROGRESS_BAR(fsguard->progress_bar), (orientation == GTK_ORIENTATION_HORIZONTAL));
|
|
gtk_orientable_set_orientation (GTK_ORIENTABLE(fsguard->progress_bar), !orientation);
|