diff --git a/helpers/DATA/lxpanel/patch_changes/005-fix_armhf_build_plugin_cpufreq.patch b/helpers/DATA/lxpanel/patch_changes/005-fix_armhf_build_plugin_cpufreq.patch new file mode 100644 index 0000000..da74806 --- /dev/null +++ b/helpers/DATA/lxpanel/patch_changes/005-fix_armhf_build_plugin_cpufreq.patch @@ -0,0 +1,117 @@ +diff --git a/plugins/cpufreq/cpufreq.c b/plugins/cpufreq/cpufreq.c +index 9e1bb0f1..34e781f0 100644 +--- a/plugins/cpufreq/cpufreq.c ++++ b/plugins/cpufreq/cpufreq.c +@@ -2,6 +2,7 @@ + * CPUFreq plugin to lxpanel + * + * Copyright (C) 2009 by Daniel Kesler ++ * 2025 Ingo Brückl + * + * 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 +@@ -32,7 +33,7 @@ + + #include "dbg.h" + +-#define PROC_ICON "cpufreq-icon" ++#define PROC_ICON "cpufreq" + #define SYSFS_CPU_DIRECTORY "/sys/devices/system/cpu" + #define SCALING_GOV "scaling_governor" + #define SCALING_AGOV "scaling_available_governors" +@@ -114,7 +115,7 @@ get_governors(cpufreq *cf){ + cf->governors = NULL; + return; + } +- sprintf(sstmp,"%s/%s",cf->cpus->data, SCALING_AGOV); ++ snprintf(sstmp, sizeof(sstmp), "%s/%s", cf->cpus->data, SCALING_AGOV); + + if (!(fp = fopen( sstmp, "r"))) { + printf("cpufreq: cannot open %s\n",sstmp); +@@ -178,13 +179,21 @@ cpufreq_set_governor(GtkWidget *widget, Param* p) { + set_gov(curr->data, p->data); + } + ++static gboolean ++permission(cpufreq *cf, const char* file) { ++ char path [ 256 ]; ++ ++ snprintf(path, sizeof(path), "%s/%s", cf->cpus->data, file); ++ return (g_access(path, W_OK) == 0); ++} ++ + static GtkWidget * + frequency_menu(cpufreq *cf){ + FILE *fp; + Param* param; + char buf[ 100 ], sstmp [ 256 ], c, bufl = 0; + +- sprintf(sstmp,"%s/%s",cf->cpus->data, SCALING_AFREQ); ++ snprintf(sstmp, sizeof(sstmp), "%s/%s", cf->cpus->data, SCALING_AFREQ); + + if (!(fp = fopen( sstmp, "r"))) { + printf("cpufreq: cannot open %s\n",sstmp); +@@ -199,7 +208,7 @@ frequency_menu(cpufreq *cf){ + if(bufl > 1){ + buf[bufl] = '\0'; + menuitem = gtk_menu_item_new_with_label(strdup(buf)); +- gtk_menu_append (GTK_MENU_SHELL (menu), menuitem); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + gtk_widget_show (menuitem); + param = g_new0(Param, 1); + param->data = strdup(buf); +@@ -259,6 +268,7 @@ static GtkWidget * + cpufreq_menu(cpufreq *cf){ + GList *l; + GSList *group; ++ gboolean can_write; + char buff[100]; + GtkMenuItem* menuitem; + Param* param; +@@ -270,33 +280,39 @@ cpufreq_menu(cpufreq *cf){ + group = NULL; + + if((cf->governors == NULL) || (!cf->has_cpufreq) || (cf->cur_governor == NULL)){ +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label("CPUFreq not supported")); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(_("CPUFreq not supported"))); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); + gtk_widget_show (GTK_WIDGET (menuitem)); + return GTK_WIDGET(menu); + } + ++ can_write = permission(cf, SCALING_SETFREQ); ++ + if(strcmp(cf->cur_governor, "userspace") == 0){ +- menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(" Frequency")); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(_(" Frequency"))); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ gtk_widget_set_sensitive (GTK_WIDGET (menuitem), can_write); + gtk_widget_show (GTK_WIDGET (menuitem)); + gtk_menu_item_set_submenu(menuitem, frequency_menu(cf)); + menuitem = GTK_MENU_ITEM(gtk_separator_menu_item_new()); +- gtk_menu_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); + gtk_widget_show (GTK_WIDGET(menuitem)); + } + ++ can_write = permission(cf, SCALING_GOV); ++ + for( l = cf->governors; l; l = l->next ) + { + if(strcmp((char*)l->data, cf->cur_governor) == 0){ +- sprintf(buff,"> %s", l->data); ++ snprintf(buff, sizeof(buff), "▸ %s", l->data); + menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(strdup(buff))); + }else{ +- sprintf(buff," %s", l->data); ++ snprintf(buff, sizeof(buff), " %s", l->data); + menuitem = GTK_MENU_ITEM(gtk_menu_item_new_with_label(strdup(buff))); + } + + gtk_menu_shell_append (GTK_MENU_SHELL (menu), GTK_WIDGET (menuitem)); ++ gtk_widget_set_sensitive (GTK_WIDGET (menuitem), can_write); + gtk_widget_show (GTK_WIDGET (menuitem)); + param = g_new0(Param, 1); + param->data = l->data; diff --git a/helpers/make-lxpanel b/helpers/make-lxpanel index 5377a50..9b9da8f 100644 --- a/helpers/make-lxpanel +++ b/helpers/make-lxpanel @@ -17,7 +17,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=1 +VERSION=2 . ./config @@ -31,6 +31,7 @@ changelog "Backport patches from upstream lxpanel to improve stability and funct Prevent wincmd plugin from triggering button clicks incorrectly (MR#78). Avoid panel freeze caused by pop-down menu detach (MR#84). Restore disabled functionality in cpufreq plugin (MR#89, 4 commits). + Add debian changes to fix armhf cpufreq plugin. These changes improve reliability in power and task management plugins."