- Update to 0.5.10

This commit is contained in:
Kris Moore 2012-09-05 18:06:15 +00:00
parent 4bb7e5edef
commit 80ede87b5f
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=303717
5 changed files with 221 additions and 207 deletions

View File

@ -6,8 +6,7 @@
#
PORTNAME= lxpanel
PORTVERSION= 0.5.8
PORTREVISION= 2
PORTVERSION= 0.5.10
CATEGORIES= x11
MASTER_SITES= SF/lxde/LXPanel%20%28desktop%20panel%29/LXPanel%20${PORTVERSION}
@ -21,7 +20,7 @@ OPTIONS= ALSA "enable ALSA audio architecture support" Off \
NLS "NLS support" On
USE_XORG= x11 xmu
USE_GNOME= gnomehack gtk20 pkgconfig
USE_GNOME= gnomehack gtk20 pkgconfig libwnck
GNU_CONFIGURE= yes
USE_AUTOTOOLS= automake:env
CONFIGURE_ARGS= --prefix=${PREFIX} \

View File

@ -1,2 +1,2 @@
SHA256 (lxpanel-0.5.8.tar.gz) = 6a3579d6f384c03a33a03e4d32016428c84eb0f2bc421704f724fe2cc015cddd
SIZE (lxpanel-0.5.8.tar.gz) = 1166241
SHA256 (lxpanel-0.5.10.tar.gz) = 5f003c38035009fbfcdbb1f1ed8d15cbbdd1216310d1d67a843fe632049996d4
SIZE (lxpanel-0.5.10.tar.gz) = 1330296

View File

@ -1,5 +1,5 @@
--- src/plugins/batt/batt.c.o 2011-09-16 11:13:43.000000000 -0400
+++ src/plugins/batt/batt.c 2011-09-16 11:36:21.000000000 -0400
--- src/plugins/batt/batt.c.orig 2012-05-20 09:57:39.000000000 -0400
+++ src/plugins/batt/batt.c 2012-09-05 13:18:22.428078608 -0400
@@ -71,7 +71,7 @@
GdkPixmap *pixmap;
GtkWidget *drawingArea;
@ -9,59 +9,64 @@
border,
height,
length,
@@ -120,15 +120,15 @@
@@ -120,16 +120,16 @@
char tooltip[ 256 ];
battery *b = lx_b->b;
/* unit: mW */
- int rate = lx_b->b->present_rate;
- int rate;
gboolean isCharging;
if (! lx_b->pixmap )
return;
/* no battery is found */
- if( b == NULL )
+ if( b == NULL || b->percentage < 0 )
+ if( b == NULL || b->percentage < 0 )
{
gtk_widget_set_tooltip_text( lx_b->drawingArea, _("No batteries found") );
+ gdk_draw_rectangle(lx_b->pixmap, lx_b->bg, TRUE, 0, 0, lx_b->width, lx_b->height);
+ gdk_draw_rectangle(lx_b->pixmap, lx_b->bg, TRUE, 0, 0, lx_b->width, lx_b->height);
return;
}
@@ -145,8 +145,8 @@
@@ -138,12 +138,11 @@
/* fixme: only one battery supported */
- rate = lx_b->b->current_now;
isCharging = battery_is_charging ( b );
/* Consider running the alarm command */
- if (! isCharging && rate &&
- if ( !isCharging && rate > 0 &&
- ( ( battery_get_remaining( b ) / 60 ) < lx_b->alarmTime ) )
+ if (! isCharging &&
+ if ( !isCharging &&
+ ( ( b->percentage ) < lx_b->alarmPercentage ) )
{
/* Shrug this should be done using glibs process functions */
/* Alarms should not run concurrently; determine whether an alarm is
@@ -176,7 +176,7 @@
int left_seconds = b->seconds -= 3600 * hours;
@@ -173,7 +172,7 @@
int left_seconds = b->seconds - 3600 * hours;
int minutes = left_seconds / 60;
snprintf(tooltip, 256,
- _("Battery: %d%% charged, %d:%02d until full"),
+ _("Battery: %d%% charged"),
lx_b->b->percentage,
hours,
minutes );
@@ -184,10 +183,10 @@
int left_seconds = b->seconds - 3600 * hours;
int minutes = left_seconds / 60;
snprintf(tooltip, 256,
- _("Battery: %d%% charged, %d:%02d until full"),
+ _("Battery: %d%% charged"),
lx_b->b->percentage,
hours,
minutes );
@@ -187,10 +187,10 @@
int left_seconds = b->seconds -= 3600 * hours;
int minutes = left_seconds / 60;
snprintf(tooltip, 256,
- _("Battery: %d%% charged, %d:%02d left"),
+ _("Battery: %d%% charged, %d:%02dh left"),
lx_b->b->percentage,
- hours,
- minutes );
+ lx_b->b->minutes / 60,
+ lx_b->b->minutes % 60 );
} else {
snprintf(tooltip, 256,
_("Battery: %d%% charged"),
@@ -374,7 +374,7 @@
- _("Battery: %d%% charged, %d:%02d left"),
+ _("Battery: %d%% charged, %d:%02dh left"),
lx_b->b->percentage,
- hours,
- minutes );
+ hours,
+ minutes);
} else {
snprintf(tooltip, 256,
_("Battery: %d%% charged"),
@@ -367,7 +366,7 @@
= lx_b->dischargingColor1 = lx_b->dischargingColor2 = NULL;
/* Set default values for integers */
@ -70,7 +75,7 @@
lx_b->requestedBorder = 1;
line s;
@@ -403,8 +403,8 @@
@@ -396,8 +395,8 @@
lx_b->dischargingColor1 = g_strdup(s.t[1]);
else if (!g_ascii_strcasecmp(s.t[0], "DischargingColor2"))
lx_b->dischargingColor2 = g_strdup(s.t[1]);
@ -81,7 +86,7 @@
else if (!g_ascii_strcasecmp(s.t[0], "BorderWidth"))
lx_b->requestedBorder = atoi(s.t[1]);
else if (!g_ascii_strcasecmp(s.t[0], "Size")) {
@@ -580,7 +580,7 @@
@@ -573,7 +572,7 @@
_("Hide if there is no battery"), &b->hide_if_no_battery, CONF_TYPE_BOOL,
#endif
_("Alarm command"), &b->alarmCommand, CONF_TYPE_STR,
@ -90,7 +95,7 @@
_("Background color"), &b->backgroundColor, CONF_TYPE_STR,
_("Charging color 1"), &b->chargingColor1, CONF_TYPE_STR,
_("Charging color 2"), &b->chargingColor2, CONF_TYPE_STR,
@@ -600,7 +600,7 @@
@@ -593,7 +592,7 @@
lxpanel_put_bool(fp, "HideIfNoBattery",lx_b->hide_if_no_battery);
lxpanel_put_str(fp, "AlarmCommand", lx_b->alarmCommand);

View File

@ -1,23 +1,34 @@
--- src/plugins/batt/batt_sys.c.o 2011-09-16 11:13:37.000000000 -0400
+++ src/plugins/batt/batt_sys.c 2011-09-16 11:40:08.000000000 -0400
@@ -46,15 +46,6 @@
void battery_reset( battery * b) {
--- src/plugins/batt/batt_sys.c.orig 2012-04-16 15:53:13.000000000 -0400
+++ src/plugins/batt/batt_sys.c 2012-09-05 13:21:28.945076259 -0400
@@ -39,26 +39,10 @@
static int battery_num = 1;
battery * b = g_new0 ( battery, 1 );
b->type_battery = TRUE;
- b->capacity_unit = "mAh";
- b->last_capacity_unit = -1;
- b->last_capacity = -1;
- b->voltage = -1;
- b->design_capacity_unit = -1;
- b->design_capacity = -1;
- b->remaining_energy = -1;
- b->remaining_capacity = -1;
- b->present_rate = -1;
- b->energy_full = -1;
- b->charge_full = -1;
- b->voltage_now = -1;
- b->energy_full_design = -1;
- b->charge_full_design = -1;
- b->energy_now = -1;
- b->charge_now = -1;
- b->current_now = -1;
- b->power_now = -1;
b->state = NULL;
- b->battery_num = battery_num;
- b->seconds = -1;
- b->percentage = -1;
- b->poststr = NULL;
- battery_num++;
return b;
}
@@ -79,7 +70,7 @@
return n;
-
static gchar* parse_info_file(battery *b, char *sys_file)
{
char *buf = NULL;
@@ -97,7 +81,7 @@
return parse_info_file(b, sys_file);
}
-void battery_print(battery *b, int show_capacity)
@ -25,57 +36,132 @@
{
if ( b->type_battery )
{
@@ -93,195 +84,65 @@
b->seconds -= 3600 * b->hours;
b->minutes = b->seconds / 60;
b->seconds -= 60 * b->minutes;
- printf(", %02d:%02d:%02d%s", b->hours, b->minutes, b->seconds, b->poststr);
+ printf(", %02d:%02d:%02d", b->hours, b->minutes, b->seconds);
@@ -110,34 +94,13 @@
int seconds = b->seconds - 3600 * hours;
int minutes = seconds / 60;
seconds -= 60 * minutes;
- printf(", %02d:%02d:%02d%s", hours, minutes, seconds,
- b->poststr);
+ printf(", %02d:%02d:%02d", hours, minutes, seconds);
} else if (b->poststr != NULL) {
printf(", %s", b->poststr);
}
-
printf("\n");
- if (show_capacity && b->design_capacity > 0) {
- if (b->last_capacity <= 100) {
- if (show_capacity && b->charge_full_design > 0) {
- int percentage = -1;
- int charge_full = -1;
- if (b->charge_full <= 100) {
- /* some broken systems just give a percentage here */
- b->percentage = b->last_capacity;
- b->last_capacity = b->percentage * b->design_capacity / 100;
- percentage = b->charge_full;
- charge_full = percentage * b->charge_full_design / 100;
- } else {
- b->percentage = b->last_capacity * 100 / b->design_capacity;
- percentage = b->charge_full * 100 / b->charge_full_design;
- charge_full = b->charge_full;
- }
- if (b->percentage > 100)
- b->percentage = 100;
- if (percentage > 100)
- percentage = 100;
-
- printf ("%s %d: design capacity %d %s, last full capacity %d %s = %d%%\n",
- BATTERY_DESC, b->battery_num - 1, b->design_capacity, b->capacity_unit, b->last_capacity, b->capacity_unit, b->percentage);
- printf ("%s %d: design capacity %d %s, "
- "last full capacity %d %s = %d%%\n",
- BATTERY_DESC, b->battery_num - 1, b->charge_full_design,
- b->capacity_unit, charge_full, b->capacity_unit,
- percentage);
- }
}
}
}
}
@@ -145,143 +108,48 @@
void battery_update( battery *b ) {
- int i = 0;
- const gchar *sys_list[] = {
- "current_now",
- "charge_now",
- "energy_now",
- "voltage_now",
- "voltage_min_design",
- "charge_full",
- "energy_full",
- "charge_full_design",
- "energy_full_design",
- "online",
- "status",
- "type",
- NULL
- };
- const gchar *sys_file;
+
void battery_update(battery *b)
{
- gchar *gctmp;
-
- /* read from sysfs */
- b->charge_now = get_gint_from_infofile(b, "charge_now");
- b->energy_now = get_gint_from_infofile(b, "energy_now");
-
- b->current_now = get_gint_from_infofile(b, "current_now");
- b->power_now = get_gint_from_infofile(b, "power_now");
- /* FIXME: Some battery drivers report -1000 when the discharge rate is
- * unavailable. Others use negative values when discharging. Best we can do
- * is to treat -1 as an error, and take the absolute value otherwise.
- * Ideally the kernel would not export the sysfs file when the value is not
- * available. */
- if (b->current_now < -1)
- b->current_now = - b->current_now;
- if (b->power_now < -1)
- b->power_now = - b->power_now;
-
- b->charge_full = get_gint_from_infofile(b, "charge_full");
- b->energy_full = get_gint_from_infofile(b, "energy_full");
-
- b->charge_full_design = get_gint_from_infofile(b, "charge_full_design");
- b->energy_full_design = get_gint_from_infofile(b, "energy_full_design");
-
- b->voltage_now = get_gint_from_infofile(b, "voltage_now");
-
- gctmp = get_gchar_from_infofile(b, "type");
- b->type_battery = gctmp ? (strcasecmp(gctmp, "battery") == 0) : TRUE;
-
- b->state = get_gchar_from_infofile(b, "status");
- if (!b->state)
- b->state = get_gchar_from_infofile(b, "state");
- if (!b->state) {
- if (b->charge_now != -1 || b->energy_now != -1
- || b->charge_full != -1 || b->energy_full != -1)
- b->state = "available";
- else
- b->state = "unavailable";
- }
-
-
- /* convert energy values (in mWh) to charge values (in mAh) if needed and possible */
-
- if (b->energy_full != -1 && b->charge_full == -1) {
- if (b->voltage_now != -1) {
- b->charge_full = b->energy_full * 1000 / b->voltage_now;
- } else {
- b->charge_full = b->energy_full;
- b->capacity_unit = "mWh";
- }
- }
-
- if (b->energy_full_design != -1 && b->charge_full_design == -1) {
- if (b->voltage_now != -1) {
- b->charge_full_design = b->energy_full_design * 1000 / b->voltage_now;
- } else {
- b->charge_full_design = b->energy_full_design;
- b->capacity_unit = "mWh";
- }
- }
-
- if (b->energy_now != -1 && b->charge_now == -1) {
- if (b->voltage_now != -1) {
- b->charge_now = b->energy_now * 1000 / b->voltage_now;
- if (b->current_now != -1)
- b->current_now = b->current_now * 1000 / b->voltage_now;
- } else {
- b->charge_now = b->energy_now;
- }
- }
-
- if (b->power_now != -1 && b->current_now == -1) {
- if (b->voltage_now != -1 && b->voltage_now != 0)
- b->current_now = b->power_now * 1000 / b->voltage_now;
- }
-
-
- if (b->charge_full < MIN_CAPACITY)
- b->percentage = 0;
- else {
- int promille = (b->charge_now * 1000) / b->charge_full;
- b->percentage = (promille + 5) / 10; /* round properly */
- }
- if (b->percentage > 100)
- b->percentage = 100;
-
+ char sstmp[ 100 ];
+ int c, state;
+ size_t intlen = sizeof c;
@ -83,95 +169,10 @@
+ snprintf(sstmp, sizeof(sstmp), "hw.acpi.battery.life");
+ sysctlbyname(sstmp, &c, &intlen, NULL, 0);
+ b->percentage = c;
battery_reset(b);
- while ( (sys_file = sys_list[i]) != NULL ) {
-
- gchar *file_content;
- GString *filename = g_string_new( ACPI_PATH_SYS_POWER_SUPPY );
- g_string_append_printf ( filename, "/%s/%s", b->path,
- sys_file );
- if ((file_content = parse_info_file(filename->str)) != NULL) {
-
- if ( strcmp("charge_now", sys_file ) == 0 ) {
- b->remaining_capacity = get_unit_value((gchar*) file_content) / 1000;
- if (!b->state)
- b->state = "available";
- }
- else if ( strcmp("energy_now", sys_file ) == 0 ) {
- b->remaining_energy = get_unit_value((gchar*) file_content) / 1000;
- if (!b->state)
- b->state = "available";
- }
- else if ( strcmp("current_now", sys_file ) == 0 ) {
- b->present_rate = get_unit_value((gchar*) file_content) / 1000;
- }
- else if ( strcmp("charge_full", sys_file ) == 0 ) {
- b->last_capacity = get_unit_value((gchar*) file_content) / 1000;
- if (!b->state)
- b->state = ("available");
- }
- else if ( strcmp("energy_full", sys_file ) == 0 ) {
- b->last_capacity_unit = get_unit_value((gchar*) file_content) / 1000;
- if (!b->state)
- b->state = ("available");
- }
- else if ( strcmp("charge_full_design", sys_file ) == 0 ) {
- b->design_capacity = get_unit_value((gchar*) file_content) / 1000;
- }
- else if ( strcmp("energy_full_design", sys_file ) == 0 ) {
- b->design_capacity_unit = get_unit_value((gchar*) file_content) / 1000;
- }
- else if ( strcmp("type", sys_file ) == 0 ) {
- b->type_battery = (strcasecmp(file_content, "battery") == 0 );
- }
- else if ( ( strcmp("status", sys_file ) == 0 ) || strcmp("state", sys_file ) == 0 )
- b->state = file_content;
- else if ( strcmp("voltage_now", sys_file ) == 0 ) {
- b->voltage = get_unit_value((gchar*) file_content) / 1000;
- }
-
- g_string_free( filename, TRUE );
- }
- i++;
- }
-
- /* convert energy values (in mWh) to charge values (in mAh) if needed and possible */
- if (b->last_capacity_unit != -1 && b->last_capacity == -1) {
- if (b->voltage != -1) {
- b->last_capacity = b->last_capacity_unit * 1000 / b->voltage;
- } else {
- b->last_capacity = b->last_capacity_unit;
- b->capacity_unit = "mWh";
- }
- }
- if (b->design_capacity_unit != -1 && b->design_capacity == -1) {
- if (b->voltage != -1) {
- b->design_capacity = b->design_capacity_unit * 1000 / b->voltage;
- } else {
- b->design_capacity = b->design_capacity_unit;
- b->capacity_unit = "mWh";
- }
- }
- if (b->remaining_energy != -1 && b->remaining_capacity == -1) {
- if (b->voltage != -1) {
- b->remaining_capacity = b->remaining_energy * 1000 / b->voltage;
- b->present_rate = b->present_rate * 1000 / b->voltage;
- } else {
- b->remaining_capacity = b->remaining_energy;
- }
- }
- if (b->last_capacity < MIN_CAPACITY)
- b->percentage = 0;
- else
- b->percentage = ((float) b->remaining_energy * 100.0) / (float) b->last_capacity_unit;
-
- if (b->percentage > 100)
- b->percentage = 100;
+
+ snprintf(sstmp, sizeof(sstmp), "hw.acpi.battery.state");
+ sysctlbyname(sstmp, &state, &intlen, NULL, 0);
+
+ switch(state) {
+ case BATT_FULL:
+ b->state = "Full";
@ -183,30 +184,35 @@
+ b->state = "Charging";
+ break;
+ case BATT_CRITICAL:
+ b->state = "Critical";
+ break;
+ b->state = "Critical";
+ break;
+ case BATT_NONE:
+ b->state = "Unavailable";
+ break;
+ b->state = "Unavailable";
+ break;
+ default:
+ b->state = "Unknown";
+ break;
+ b->state = "Unknown";
+ break;
+
+ }
+
+ snprintf(sstmp, sizeof(sstmp), "hw.acpi.battery.time");
+ sysctlbyname(sstmp, &c, &intlen, NULL, 0);
+ b->seconds = c * 60;
-
- if (b->present_rate == -1) {
- if (b->current_now == -1) {
- b->poststr = "rate information unavailable";
- b->seconds = -1;
- } else if (!strcasecmp(b->state, "charging")) {
- if (b->present_rate > MIN_PRESENT_RATE) {
- b->seconds = 3600 * (b->last_capacity - b->remaining_capacity) / b->present_rate;
- if (b->current_now > MIN_PRESENT_RATE) {
- b->seconds = 3600 * (b->charge_full - b->charge_now) / b->current_now;
- b->poststr = " until charged";
- } else {
- b->poststr = "charging at zero rate - will never fully charge.";
- b->seconds = -1;
- }
- } else if (!strcasecmp(b->state, "discharging")) {
- if (b->present_rate > MIN_PRESENT_RATE) {
- b->seconds = 3600 * b->remaining_capacity / b->present_rate;
- if (b->current_now > MIN_PRESENT_RATE) {
- b->seconds = 3600 * b->charge_now / b->current_now;
- b->poststr = " remaining";
- } else {
- b->poststr = "discharging at zero rate - will never fully discharge.";
@ -215,21 +221,11 @@
- } else {
- b->poststr = NULL;
- b->seconds = -1;
}
-
-}
-static battery* acpi_sys_get_battery_from_dir (const gchar *device_name ) {
- battery *b = battery_new();
- b->path = g_strdup( device_name );
- return b;
+ snprintf(sstmp, sizeof(sstmp), "hw.acpi.battery.time");
+ sysctlbyname(sstmp, &c, &intlen, NULL, 0);
+ b->minutes = c;
+ b->seconds = c * 60;
+
- }
}
-
-
+
battery *battery_get() {
- GError * error = NULL;
- const gchar *entry;
@ -242,7 +238,8 @@
- }
- while ( ( entry = g_dir_read_name (dir) ) != NULL )
- {
- b = acpi_sys_get_battery_from_dir(entry);
- b = battery_new();
- b->path = g_strdup( entry );
- battery_update ( b );
- if ( b->type_battery == TRUE )
- break;
@ -258,7 +255,7 @@
return b;
}
@@ -291,10 +152,3 @@
@@ -293,10 +161,3 @@
strcasecmp( b->state, "Full" ) == 0
|| strcasecmp( b->state, "Charging" ) == 0 );
}

View File

@ -38,7 +38,9 @@ include/lxpanel/plugin.h
%%DATADIR%%/images/scrllock-off.png
%%DATADIR%%/images/scrllock-on.png
%%DATADIR%%/images/stock_volume.png
%%DATADIR%%/images/volume.png
%%DATADIR%%/images/volume-high.png
%%DATADIR%%/images/volume-low.png
%%DATADIR%%/images/volume-medium.png
%%DATADIR%%/images/window-manager.png
%%DATADIR%%/images/xkb-flags/ae.png
%%DATADIR%%/images/xkb-flags/am.png
@ -119,6 +121,9 @@ include/lxpanel/plugin.h
%%DATADIR%%/ui/panel-pref.ui
%%DATADIR%%/profile/default/config
%%DATADIR%%/profile/default/panels/panel
%%DATADIR%%/profile/two_panels/config
%%DATADIR%%/profile/two_panels/panels/bottom
%%DATADIR%%/profile/two_panels/panels/top
%%NLS%%share/locale/af/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/ar/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/be/LC_MESSAGES/lxpanel.mo
@ -147,6 +152,7 @@ include/lxpanel/plugin.h
%%NLS%%share/locale/id/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/it/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/ja/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/kk/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/ko/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/km/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/lt/LC_MESSAGES/lxpanel.mo
@ -172,6 +178,7 @@ include/lxpanel/plugin.h
%%NLS%%share/locale/th/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/tr/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/tt_RU/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/ug/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/uk/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/ur/LC_MESSAGES/lxpanel.mo
%%NLS%%share/locale/ur_PK/LC_MESSAGES/lxpanel.mo
@ -182,6 +189,8 @@ include/lxpanel/plugin.h
@dirrm %%DATADIR%%/images
@dirrm %%DATADIR%%/profile/default/panels
@dirrm %%DATADIR%%/profile/default
@dirrm %%DATADIR%%/profile/two_panels/panels
@dirrm %%DATADIR%%/profile/two_panels
@dirrm %%DATADIR%%/profile
@dirrm %%DATADIR%%/ui
@dirrm %%DATADIR%%
@ -192,6 +201,8 @@ include/lxpanel/plugin.h
@dirrmtry share/locale/fo
@dirrmtry share/locale/frp/LC_MESSAGES
@dirrmtry share/locale/frp
@dirrmtry share/locale/kk/LC_MESSAGES
@dirrmtry share/locale/kk
@dirrmtry share/locale/km/LC_MESSAGES
@dirrmtry share/locale/km
@dirrmtry share/locale/lg/LC_MESSAGES
@ -204,6 +215,8 @@ include/lxpanel/plugin.h
@dirrmtry share/locale/te
@dirrmtry share/locale/tt_RU/LC_MESSAGES
@dirrmtry share/locale/tt_RU
@dirrmtry share/locale/ug/LC_MESSAGES
@dirrmtry share/locale/ug
@dirrmtry share/locale/ur_PK/LC_MESSAGES
@dirrmtry share/locale/ur_PK
@dirrmtry lib/lxpanel/plugins