Clock *click_clock(Panel *panel, int x, int y) { Clock *clock = &panel->clock; if (area_is_under_mouse(clock, x, y)) return clock; return NULL; }
Battery *click_battery(Panel *panel, int x, int y) { Battery *bat = &panel->battery; if (area_is_under_mouse(bat, x, y)) return bat; return NULL; }
Execp *click_execp(Panel *panel, int x, int y) { for (GList *l = panel->execp_list; l; l = l->next) { Execp *execp = (Execp *)l->data; if (area_is_under_mouse(execp, x, y)) return execp; } return NULL; }
Launcher *click_launcher(Panel *panel, int x, int y) { Launcher *launcher = &panel->launcher; if (area_is_under_mouse(launcher, x, y)) return launcher; return NULL; }
Taskbar *click_taskbar(Panel *panel, int x, int y) { for (int i = 0; i < panel->num_desktops; i++) { Taskbar *taskbar = &panel->taskbar[i]; if (area_is_under_mouse(taskbar, x, y)) return taskbar; } return NULL; }
LauncherIcon *click_launcher_icon(Panel *panel, int x, int y) { Launcher *launcher = click_launcher(panel, x, y); if (launcher) { for (GSList *l = launcher->list_icons; l; l = l->next) { LauncherIcon *icon = (LauncherIcon *)l->data; if (area_is_under_mouse(icon, x, y)) return icon; } } return NULL; }
Task *click_task(Panel *panel, int x, int y) { Taskbar *taskbar = click_taskbar(panel, x, y); if (taskbar) { GList *l = taskbar->area.children; if (taskbarname_enabled) l = l->next; for (; l; l = l->next) { Task *task = (Task *)l->data; if (area_is_under_mouse(task, x, y)) { return task; } } } return NULL; }
Area *find_area_under_mouse(void *root, int x, int y) { Area *result = root; Area *new_result = result; do { result = new_result; GList *it = result->children; while (it) { Area *a = (Area *)it->data; if (area_is_under_mouse(a, x, y)) { new_result = a; break; } it = it->next; } } while (new_result != result); return result; }