Allow clicking and mousewheeling on the battery panel

This commit is the same as vimishor's original [*] except that I have
added middle-click and up/down mousewheel actions. In order to fix a
ftbs I also added guards to panel.c, panel.h & tint.c

The following configuration settings have been created :-

battery_lclick_command
battery_mclick_command
battery_rclick_command
battery_uwheel_command
battery_dwheel_command

[*] c78732c46a
This commit is contained in:
berkley4 2015-07-13 04:16:02 +01:00
parent e84d963ab6
commit fd78e6d886
6 changed files with 124 additions and 0 deletions

View file

@ -56,6 +56,11 @@ static char buf_bat_time[20];
int8_t battery_low_status;
unsigned char battery_low_cmd_sent;
char *battery_low_cmd;
char *battery_lclick_command;
char *battery_mclick_command;
char *battery_rclick_command;
char *battery_uwheel_command;
char *battery_dwheel_command;
gchar *path_energy_now;
gchar *path_energy_full;
gchar *path_current_now;
@ -141,6 +146,11 @@ void default_battery()
bat1_font_desc = NULL;
bat2_font_desc = NULL;
battery_low_cmd = NULL;
battery_lclick_command = NULL;
battery_mclick_command = NULL;
battery_rclick_command = NULL;
battery_uwheel_command = NULL;
battery_dwheel_command = NULL;
path_energy_now = NULL;
path_energy_full = NULL;
path_current_now = NULL;
@ -171,6 +181,16 @@ void cleanup_battery()
path_status = NULL;
free(battery_low_cmd);
battery_low_cmd = NULL;
free(battery_lclick_command);
battery_lclick_command = NULL;
free(battery_mclick_command);
battery_mclick_command = NULL;
free(battery_rclick_command);
battery_rclick_command = NULL;
free(battery_uwheel_command);
battery_uwheel_command = NULL;
free(battery_dwheel_command);
battery_dwheel_command = NULL;
stop_timeout(battery_timeout);
battery_timeout = NULL;
battery_found = 0;
@ -574,3 +594,26 @@ int resize_battery(void *obj)
}
return ret;
}
void battery_action(int button)
{
char *command = 0;
switch (button) {
case 1:
command = battery_lclick_command;
break;
case 2:
command = battery_mclick_command;
break;
case 3:
command = battery_rclick_command;
break;
case 4:
command = battery_uwheel_command;
break;
case 5:
command = battery_dwheel_command;
break;
}
tint_exec(command);
}

View file

@ -56,6 +56,12 @@ extern int percentage_hide;
extern int8_t battery_low_status;
extern char *battery_low_cmd;
extern char *battery_lclick_command;
extern char *battery_mclick_command;
extern char *battery_rclick_command;
extern char *battery_uwheel_command;
extern char *battery_dwheel_command;
// default global data
void default_battery();
@ -71,4 +77,6 @@ void draw_battery(void *obj, cairo_t *c);
int resize_battery(void *obj);
void battery_action(int button);
#endif

View file

@ -349,6 +349,36 @@ void add_entry (char *key, char *value)
battery_low_status = atoi(value);
if(battery_low_status < 0 || battery_low_status > 100)
battery_low_status = 0;
#endif
}
else if (strcmp(key, "battery_lclick_command") == 0) {
#ifdef ENABLE_BATTERY
if (strlen(value) > 0)
battery_lclick_command = strdup(value);
#endif
}
else if (strcmp(key, "battery_mclick_command") == 0) {
#ifdef ENABLE_BATTERY
if (strlen(value) > 0)
battery_mclick_command = strdup(value);
#endif
}
else if (strcmp(key, "battery_rclick_command") == 0) {
#ifdef ENABLE_BATTERY
if (strlen(value) > 0)
battery_rclick_command = strdup(value);
#endif
}
else if (strcmp(key, "battery_uwheel_command") == 0) {
#ifdef ENABLE_BATTERY
if (strlen(value) > 0)
battery_uwheel_command = strdup(value);
#endif
}
else if (strcmp(key, "battery_dwheel_command") == 0) {
#ifdef ENABLE_BATTERY
if (strlen(value) > 0)
battery_dwheel_command = strdup(value);
#endif
}
else if (strcmp (key, "battery_low_cmd") == 0) {

View file

@ -796,6 +796,22 @@ int click_clock(Panel *panel, int x, int y)
}
#ifdef ENABLE_BATTERY
int click_battery(Panel *panel, int x, int y)
{
Battery bat = panel->battery;
if (panel_horizontal) {
if (bat.area.on_screen && x >= bat.area.posx && x <= (bat.area.posx + bat.area.width))
return TRUE;
} else {
if (bat.area.on_screen && y >= bat.area.posy && y <= (bat.area.posy + bat.area.height))
return TRUE;
}
return FALSE;
}
#endif
Area* click_area(Panel *panel, int x, int y)
{
Area* result = &panel->area;

View file

@ -160,6 +160,11 @@ Launcher *click_launcher (Panel *panel, int x, int y);
LauncherIcon *click_launcher_icon (Panel *panel, int x, int y);
int click_padding(Panel *panel, int x, int y);
int click_clock(Panel *panel, int x, int y);
#ifdef ENABLE_BATTERY
int click_battery(Panel *panel, int x, int y);
#endif
Area* click_area(Panel *panel, int x, int y);
void autohide_show(void* p);

View file

@ -456,6 +456,18 @@ int tint2_handles_click(Panel* panel, XButtonEvent* e)
else
return 0;
}
#ifdef ENABLE_BATTERY
if (click_battery(panel, e->x, e->y)) {
if ( (e->button == 1 && battery_lclick_command) ||
(e->button == 2 && battery_mclick_command) ||
(e->button == 3 && battery_rclick_command) ||
(e->button == 4 && battery_uwheel_command) ||
(e->button == 5 && battery_dwheel_command) )
return 1;
else
return 0;
}
#endif
return 0;
}
@ -603,6 +615,16 @@ void event_button_release (XEvent *e)
return;
}
#ifdef ENABLE_BATTERY
if (click_battery(panel, e->xbutton.x, e->xbutton.y)) {
battery_action(e->xbutton.button);
if (panel_layer == BOTTOM_LAYER)
XLowerWindow (server.dsp, panel->main_win);
task_drag = 0;
return;
}
#endif
if (e->xbutton.button == 1 && click_launcher(panel, e->xbutton.x, e->xbutton.y)) {
LauncherIcon *icon = click_launcher_icon(panel, e->xbutton.x, e->xbutton.y);
if (icon) {