Compare commits

..

10 Commits

Author SHA1 Message Date
o9000
92fa96b8c7 taskbar+area: Implement center alignment 2015-05-30 14:50:25 +02:00
o9000
ca862025d6 Added logic for left/right alignment; it's buggy as hell 2015-05-05 23:11:39 +02:00
o9000
d2ee0a481f Adding missing icons 2015-05-05 11:18:55 +02:00
o9000
1d95e01882 tint2conf: Updated tooltips 2015-05-03 22:30:10 +02:00
o9000
ebc356d1c7 Updated tint2rc file header with link to docs 2015-05-03 20:01:58 +00:00
o9000
54708a6167 Updated desktop file 2015-05-03 17:21:43 +00:00
o9000
60f01f7fff Updated icons and desktop files 2015-05-03 19:17:24 +02:00
o9000
9f8860f003 Updated tint2.desktop 2015-05-03 16:34:12 +00:00
o9000
be19d1eeef Add tint2.desktop 2015-05-03 16:31:07 +00:00
o9000
1d02b8588b Fix icon loading with wrong image extension 2015-05-03 16:22:23 +02:00
16 changed files with 810 additions and 248 deletions

View File

@@ -145,6 +145,9 @@ set_target_properties( tint2 PROPERTIES COMPILE_FLAGS "-Wall -fno-strict-aliasin
set_target_properties( tint2 PROPERTIES LINK_FLAGS "-pthread -fno-strict-aliasing ${ASAN_L_FLAGS}" ) set_target_properties( tint2 PROPERTIES LINK_FLAGS "-pthread -fno-strict-aliasing ${ASAN_L_FLAGS}" )
install( TARGETS tint2 DESTINATION bin ) install( TARGETS tint2 DESTINATION bin )
install( FILES tint2.svg DESTINATION ${DATADIR}/icons/hicolor/scalable/apps )
install( FILES tint2.desktop DESTINATION ${DATADIR}/applications )
install( CODE "execute_process(COMMAND gtk-update-icon-cache -f -t ${DATADIR}/icons/hicolor WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})" )
install( FILES sample/tint2rc DESTINATION ${SYSCONFDIR}/xdg/tint2 ) install( FILES sample/tint2rc DESTINATION ${SYSCONFDIR}/xdg/tint2 )
install( FILES default_icon.png DESTINATION ${DATADIR}/tint2 ) install( FILES default_icon.png DESTINATION ${DATADIR}/tint2 )
install( FILES AUTHORS ChangeLog README.md DESTINATION ${DOCDIR} ) install( FILES AUTHORS ChangeLog README.md DESTINATION ${DOCDIR} )

View File

@@ -213,8 +213,9 @@ int resize_launcher(void *obj)
free_icon(launcherIcon->icon_scaled); free_icon(launcherIcon->icon_scaled);
launcherIcon->icon_original = launcherIcon->icon_scaled = NULL; launcherIcon->icon_original = launcherIcon->icon_scaled = NULL;
// Load the new file and scale // Load the new file and scale
launcherIcon->icon_original = imlib_load_image_immediately(new_icon_path);
#ifdef HAVE_RSVG #ifdef HAVE_RSVG
if (g_str_has_suffix(new_icon_path, ".svg")) { if (!launcherIcon->icon_original && g_str_has_suffix(new_icon_path, ".svg")) {
GError* err = NULL; GError* err = NULL;
RsvgHandle* svg = rsvg_handle_new_from_file(new_icon_path, &err); RsvgHandle* svg = rsvg_handle_new_from_file(new_icon_path, &err);

View File

@@ -354,7 +354,7 @@ int resize_panel(void *obj)
} }
Taskbar *taskbar = &panel->taskbar[i]; Taskbar *taskbar = &panel->taskbar[i];
GSList *l; GList *l;
for (l = taskbar->area.list; l; l = l->next) { for (l = taskbar->area.list; l; l = l->next) {
Area *child = l->data; Area *child = l->data;
if (!child->on_screen) if (!child->on_screen)
@@ -389,7 +389,7 @@ int resize_panel(void *obj)
int requested_size = (2 * taskbar->area.bg->border.width) + (2 * taskbar->area.paddingxlr); int requested_size = (2 * taskbar->area.bg->border.width) + (2 * taskbar->area.paddingxlr);
int items = 0; int items = 0;
GSList *l = taskbar->area.list; GList *l = taskbar->area.list;
if (taskbarname_enabled) if (taskbarname_enabled)
l = l->next; l = l->next;
for (; l; l = l->next) { for (; l; l = l->next) {
@@ -482,29 +482,29 @@ void set_panel_items_order(Panel *p)
int k, j; int k, j;
if (p->area.list) { if (p->area.list) {
g_slist_free(p->area.list); g_list_free(p->area.list);
p->area.list = 0; p->area.list = 0;
} }
for (k=0 ; k < strlen(panel_items_order) ; k++) { for (k=0 ; k < strlen(panel_items_order) ; k++) {
if (panel_items_order[k] == 'L') { if (panel_items_order[k] == 'L') {
p->area.list = g_slist_append(p->area.list, &p->launcher); p->area.list = g_list_append(p->area.list, &p->launcher);
p->launcher.area.resize = 1; p->launcher.area.resize = 1;
} }
if (panel_items_order[k] == 'T') { if (panel_items_order[k] == 'T') {
for (j=0 ; j < p->nb_desktop ; j++) for (j=0 ; j < p->nb_desktop ; j++)
p->area.list = g_slist_append(p->area.list, &p->taskbar[j]); p->area.list = g_list_append(p->area.list, &p->taskbar[j]);
} }
#ifdef ENABLE_BATTERY #ifdef ENABLE_BATTERY
if (panel_items_order[k] == 'B') if (panel_items_order[k] == 'B')
p->area.list = g_slist_append(p->area.list, &p->battery); p->area.list = g_list_append(p->area.list, &p->battery);
#endif #endif
int i = p - panel1; int i = p - panel1;
if (panel_items_order[k] == 'S' && systray_on_monitor(i, nb_panel)) { if (panel_items_order[k] == 'S' && systray_on_monitor(i, nb_panel)) {
p->area.list = g_slist_append(p->area.list, &systray); p->area.list = g_list_append(p->area.list, &systray);
} }
if (panel_items_order[k] == 'C') if (panel_items_order[k] == 'C')
p->area.list = g_slist_append(p->area.list, &p->clock); p->area.list = g_list_append(p->area.list, &p->clock);
} }
init_rendering(&p->area, 0); init_rendering(&p->area, 0);
} }
@@ -629,7 +629,7 @@ void set_panel_background(Panel *p)
} }
// redraw panel's object // redraw panel's object
GSList *l0; GList *l0;
Area *a; Area *a;
for (l0 = p->area.list; l0 ; l0 = l0->next) { for (l0 = p->area.list; l0 ; l0 = l0->next) {
a = l0->data; a = l0->data;
@@ -695,7 +695,7 @@ Taskbar *click_taskbar (Panel *panel, int x, int y)
Task *click_task (Panel *panel, int x, int y) Task *click_task (Panel *panel, int x, int y)
{ {
GSList *l0; GList *l0;
Taskbar *tskbar; Taskbar *tskbar;
if ( (tskbar = click_taskbar(panel, x, y)) ) { if ( (tskbar = click_taskbar(panel, x, y)) ) {
@@ -797,7 +797,7 @@ Area* click_area(Panel *panel, int x, int y)
Area* new_result = result; Area* new_result = result;
do { do {
result = new_result; result = new_result;
GSList* it = result->list; GList* it = result->list;
while (it) { while (it) {
Area* a = it->data; Area* a = it->data;
if (a->on_screen && x >= a->posx && x <= (a->posx + a->width) if (a->on_screen && x >= a->posx && x <= (a->posx + a->width)

View File

@@ -109,7 +109,7 @@ Task *add_task (Window win)
} }
new_tsk2->icon_width = new_tsk.icon_width; new_tsk2->icon_width = new_tsk.icon_width;
new_tsk2->icon_height = new_tsk.icon_height; new_tsk2->icon_height = new_tsk.icon_height;
tskbar->area.list = g_slist_append(tskbar->area.list, new_tsk2); tskbar->area.list = g_list_append(tskbar->area.list, new_tsk2);
tskbar->area.resize = 1; tskbar->area.resize = 1;
g_ptr_array_add(task_group, new_tsk2); g_ptr_array_add(task_group, new_tsk2);
//printf("add_task panel %d, desktop %d, task %s\n", i, j, new_tsk2->title); //printf("add_task panel %d, desktop %d, task %s\n", i, j, new_tsk2->title);
@@ -167,7 +167,7 @@ void remove_task (Task *tsk)
for (i=0; i<task_group->len; ++i) { for (i=0; i<task_group->len; ++i) {
tsk2 = g_ptr_array_index(task_group, i); tsk2 = g_ptr_array_index(task_group, i);
tskbar = tsk2->area.parent; tskbar = tsk2->area.parent;
tskbar->area.list = g_slist_remove(tskbar->area.list, tsk2); tskbar->area.list = g_list_remove(tskbar->area.list, tsk2);
tskbar->area.resize = 1; tskbar->area.resize = 1;
if (tsk2 == task_active) task_active = 0; if (tsk2 == task_active) task_active = 0;
if (tsk2 == task_drag) task_drag = 0; if (tsk2 == task_drag) task_drag = 0;
@@ -422,15 +422,13 @@ Task *find_active_task(Task *current_task, Task *active_task)
if (active_task == NULL) if (active_task == NULL)
return current_task; return current_task;
GSList *l0;
Task *tsk;
Taskbar* tskbar = current_task->area.parent; Taskbar* tskbar = current_task->area.parent;
l0 = tskbar->area.list; GList *l0 = tskbar->area.list;
if (taskbarname_enabled) if (taskbarname_enabled)
l0 = l0->next; l0 = l0->next;
for (; l0 ; l0 = l0->next) { for (; l0 ; l0 = l0->next) {
tsk = l0->data; Task *tsk = l0->data;
if (tsk->win == active_task->win) if (tsk->win == active_task->win)
return tsk; return tsk;
} }
@@ -443,15 +441,13 @@ Task *next_task(Task *tsk)
if (tsk == 0) if (tsk == 0)
return 0; return 0;
GSList *l0, *lfirst_tsk;
Task *tsk1;
Taskbar* tskbar = tsk->area.parent; Taskbar* tskbar = tsk->area.parent;
l0 = tskbar->area.list; GList *l0 = tskbar->area.list;
if (taskbarname_enabled) l0 = l0->next; if (taskbarname_enabled) l0 = l0->next;
lfirst_tsk = l0; GList *lfirst_tsk = l0;
for (; l0 ; l0 = l0->next) { for (; l0 ; l0 = l0->next) {
tsk1 = l0->data; Task *tsk1 = l0->data;
if (tsk1 == tsk) { if (tsk1 == tsk) {
if (l0->next == 0) l0 = lfirst_tsk; if (l0->next == 0) l0 = lfirst_tsk;
else l0 = l0->next; else l0 = l0->next;
@@ -467,19 +463,18 @@ Task *prev_task(Task *tsk)
if (tsk == 0) if (tsk == 0)
return 0; return 0;
GSList *l0, *lfirst_tsk;
Task *tsk1, *tsk2; Task *tsk1, *tsk2;
Taskbar* tskbar = tsk->area.parent; Taskbar* tskbar = tsk->area.parent;
tsk2 = 0; tsk2 = 0;
l0 = tskbar->area.list; GList *l0 = tskbar->area.list;
if (taskbarname_enabled) l0 = l0->next; if (taskbarname_enabled) l0 = l0->next;
lfirst_tsk = l0; GList *lfirst_tsk = l0;
for (; l0 ; l0 = l0->next) { for (; l0 ; l0 = l0->next) {
tsk1 = l0->data; tsk1 = l0->data;
if (tsk1 == tsk) { if (tsk1 == tsk) {
if (l0 == lfirst_tsk) { if (l0 == lfirst_tsk) {
l0 = g_slist_last ( l0 ); l0 = g_list_last ( l0 );
tsk2 = l0->data; tsk2 = l0->data;
} }
return tsk2; return tsk2;

View File

@@ -97,7 +97,7 @@ void cleanup_taskbar()
} }
free_area(&tskbar->area); free_area(&tskbar->area);
// remove taskbar from the panel // remove taskbar from the panel
panel->area.list = g_slist_remove(panel->area.list, tskbar); panel->area.list = g_list_remove(panel->area.list, tskbar);
} }
if (panel->taskbar) { if (panel->taskbar) {
free(panel->taskbar); free(panel->taskbar);
@@ -153,6 +153,7 @@ void init_taskbar_panel(void *p)
panel->g_taskbar.area.parent = panel; panel->g_taskbar.area.parent = panel;
panel->g_taskbar.area.panel = panel; panel->g_taskbar.area.panel = panel;
panel->g_taskbar.area.size_mode = SIZE_BY_LAYOUT; panel->g_taskbar.area.size_mode = SIZE_BY_LAYOUT;
panel->g_taskbar.area.alignment = ALIGN_CENTER;
panel->g_taskbar.area._resize = resize_taskbar; panel->g_taskbar.area._resize = resize_taskbar;
panel->g_taskbar.area._draw_foreground = draw_taskbar; panel->g_taskbar.area._draw_foreground = draw_taskbar;
panel->g_taskbar.area._on_change_layout = on_change_taskbar; panel->g_taskbar.area._on_change_layout = on_change_taskbar;
@@ -334,7 +335,7 @@ int resize_taskbar(void *obj)
resize_by_layout(obj, panel->g_task.maximum_width); resize_by_layout(obj, panel->g_task.maximum_width);
text_width = panel->g_task.maximum_width; text_width = panel->g_task.maximum_width;
GSList *l = taskbar->area.list; GList *l = taskbar->area.list;
if (taskbarname_enabled) l = l->next; if (taskbarname_enabled) l = l->next;
for (; l != NULL; l = l->next) { for (; l != NULL; l = l->next) {
if (((Task *)l->data)->area.on_screen) { if (((Task *)l->data)->area.on_screen) {
@@ -388,7 +389,7 @@ void set_taskbar_state(Taskbar *tskbar, int state)
if (taskbarname_enabled && tskbar->bar_name.state_pix[state] == 0) if (taskbarname_enabled && tskbar->bar_name.state_pix[state] == 0)
tskbar->bar_name.area.redraw = 1; tskbar->bar_name.area.redraw = 1;
if (panel_mode == MULTI_DESKTOP && panel1[0].g_taskbar.background[TASKBAR_NORMAL] != panel1[0].g_taskbar.background[TASKBAR_ACTIVE]) { if (panel_mode == MULTI_DESKTOP && panel1[0].g_taskbar.background[TASKBAR_NORMAL] != panel1[0].g_taskbar.background[TASKBAR_ACTIVE]) {
GSList *l = tskbar->area.list; GList *l = tskbar->area.list;
if (taskbarname_enabled) l = l->next; if (taskbarname_enabled) l = l->next;
for ( ; l ; l = l->next) for ( ; l ; l = l->next)
set_task_redraw(l->data); set_task_redraw(l->data);
@@ -511,7 +512,7 @@ int taskbar_needs_sort(Taskbar *taskbar)
if (taskbar_sort_method == TASKBAR_NOSORT) if (taskbar_sort_method == TASKBAR_NOSORT)
return 0; return 0;
GSList *i, *j; GList *i, *j;
for (i = taskbar->area.list, j = i ? i->next : NULL; i && j; i = i->next, j = j->next) { for (i = taskbar->area.list, j = i ? i->next : NULL; i && j; i = i->next, j = j->next) {
if (compare_tasks(i->data, j->data, taskbar) > 0) { if (compare_tasks(i->data, j->data, taskbar) > 0) {
return 1; return 1;
@@ -528,7 +529,7 @@ void sort_tasks(Taskbar *taskbar)
if (!taskbar_needs_sort(taskbar)) { if (!taskbar_needs_sort(taskbar)) {
return; return;
} }
taskbar->area.list = g_slist_sort_with_data(taskbar->area.list, (GCompareDataFunc)compare_tasks, taskbar); taskbar->area.list = g_list_sort_with_data(taskbar->area.list, (GCompareDataFunc)compare_tasks, taskbar);
taskbar->area.resize = 1; taskbar->area.resize = 1;
panel_refresh = 1; panel_refresh = 1;
((Panel*)taskbar->area.panel)->area.resize = 1; ((Panel*)taskbar->area.panel)->area.resize = 1;

View File

@@ -76,7 +76,7 @@ void init_taskbarname_panel(void *p)
tskbar->bar_name.name = g_strdup_printf("%d", j+1); tskbar->bar_name.name = g_strdup_printf("%d", j+1);
// append the name at the beginning of taskbar // append the name at the beginning of taskbar
tskbar->area.list = g_slist_append(tskbar->area.list, &tskbar->bar_name); tskbar->area.list = g_list_append(tskbar->area.list, &tskbar->bar_name);
} }
for (l=list ; l ; l = l->next) for (l=list ; l ; l = l->next)
@@ -103,7 +103,7 @@ void cleanup_taskbarname()
XFreePixmap(server.dsp, tskbar->bar_name.state_pix[k]); XFreePixmap(server.dsp, tskbar->bar_name.state_pix[k]);
tskbar->bar_name.state_pix[k] = 0; tskbar->bar_name.state_pix[k] = 0;
} }
tskbar->area.list = g_slist_remove(tskbar->area.list, &tskbar->bar_name); tskbar->area.list = g_list_remove(tskbar->area.list, &tskbar->bar_name);
} }
} }

View File

@@ -470,8 +470,8 @@ void event_button_motion_notify (XEvent *e)
} else { } else {
// Swap the task_drag with the task on the event's location (if they differ) // Swap the task_drag with the task on the event's location (if they differ)
if(event_task && event_task != task_drag) { if(event_task && event_task != task_drag) {
GSList * drag_iter = g_slist_find(event_taskbar->area.list, task_drag); GList * drag_iter = g_list_find(event_taskbar->area.list, task_drag);
GSList * task_iter = g_slist_find(event_taskbar->area.list, event_task); GList * task_iter = g_list_find(event_taskbar->area.list, event_task);
if(drag_iter && task_iter) { if(drag_iter && task_iter) {
gpointer temp = task_iter->data; gpointer temp = task_iter->data;
task_iter->data = drag_iter->data; task_iter->data = drag_iter->data;
@@ -488,14 +488,14 @@ void event_button_motion_notify (XEvent *e)
return; return;
Taskbar * drag_taskbar = (Taskbar*)task_drag->area.parent; Taskbar * drag_taskbar = (Taskbar*)task_drag->area.parent;
drag_taskbar->area.list = g_slist_remove(drag_taskbar->area.list, task_drag); drag_taskbar->area.list = g_list_remove(drag_taskbar->area.list, task_drag);
if(event_taskbar->area.posx > drag_taskbar->area.posx || event_taskbar->area.posy > drag_taskbar->area.posy) { if(event_taskbar->area.posx > drag_taskbar->area.posx || event_taskbar->area.posy > drag_taskbar->area.posy) {
int i = (taskbarname_enabled) ? 1 : 0; int i = (taskbarname_enabled) ? 1 : 0;
event_taskbar->area.list = g_slist_insert(event_taskbar->area.list, task_drag, i); event_taskbar->area.list = g_list_insert(event_taskbar->area.list, task_drag, i);
} }
else else
event_taskbar->area.list = g_slist_append(event_taskbar->area.list, task_drag); event_taskbar->area.list = g_list_append(event_taskbar->area.list, task_drag);
// Move task to other desktop (but avoid the 'Window desktop changed' code in 'event_property_notify') // Move task to other desktop (but avoid the 'Window desktop changed' code in 'event_property_notify')
task_drag->area.parent = event_taskbar; task_drag->area.parent = event_taskbar;
@@ -619,7 +619,8 @@ void event_property_notify (XEvent *e)
// Change name of desktops // Change name of desktops
else if (at == server.atom._NET_DESKTOP_NAMES) { else if (at == server.atom._NET_DESKTOP_NAMES) {
if (!taskbarname_enabled) return; if (!taskbarname_enabled) return;
GSList *l, *list = server_get_name_of_desktop(); GSList *list = server_get_name_of_desktop();
GSList *l;
int j; int j;
gchar *name; gchar *name;
Taskbar *tskbar; Taskbar *tskbar;
@@ -677,10 +678,9 @@ void event_property_notify (XEvent *e)
// check ALLDESKTOP task => resize taskbar // check ALLDESKTOP task => resize taskbar
Taskbar *tskbar; Taskbar *tskbar;
Task *tsk; Task *tsk;
GSList *l;
if (server.nb_desktop > old_desktop) { if (server.nb_desktop > old_desktop) {
tskbar = &panel->taskbar[old_desktop]; tskbar = &panel->taskbar[old_desktop];
l = tskbar->area.list; GList *l = tskbar->area.list;
if (taskbarname_enabled) l = l->next; if (taskbarname_enabled) l = l->next;
for (; l ; l = l->next) { for (; l ; l = l->next) {
tsk = l->data; tsk = l->data;
@@ -694,7 +694,7 @@ void event_property_notify (XEvent *e)
} }
} }
tskbar = &panel->taskbar[server.desktop]; tskbar = &panel->taskbar[server.desktop];
l = tskbar->area.list; GList *l = tskbar->area.list;
if (taskbarname_enabled) l = l->next; if (taskbarname_enabled) l = l->next;
for (; l ; l = l->next) { for (; l ; l = l->next) {
tsk = l->data; tsk = l->data;

View File

@@ -64,7 +64,6 @@ set_target_properties( tint2conf PROPERTIES COMPILE_FLAGS "-Wall -pthread" )
set_target_properties( tint2conf PROPERTIES LINK_FLAGS "-pthread" ) set_target_properties( tint2conf PROPERTIES LINK_FLAGS "-pthread" )
install( TARGETS tint2conf DESTINATION bin ) install( TARGETS tint2conf DESTINATION bin )
install( PROGRAMS tintwizard.py DESTINATION bin ) install( FILES tint2conf.svg DESTINATION ${DATADIR}/icons/hicolor/scalable/apps )
install( FILES taskbar.svg DESTINATION ${DATADIR}/icons/hicolor/scalable/apps )
install( FILES tint2conf.desktop DESTINATION ${DATADIR}/applications ) install( FILES tint2conf.desktop DESTINATION ${DATADIR}/applications )
install( CODE "execute_process(COMMAND gtk-update-icon-cache -f -t ${DATADIR}/icons/hicolor WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})" ) install( CODE "execute_process(COMMAND gtk-update-icon-cache -f -t ${DATADIR}/icons/hicolor WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})" )

View File

@@ -853,7 +853,7 @@ void create_panel(GtkWidget *parent)
row++; row++;
col = 2; col = 2;
label = gtk_label_new(_("Width")); label = gtk_label_new(_("Length"));
gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
gtk_widget_show(label); gtk_widget_show(label);
gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0);
@@ -863,7 +863,7 @@ void create_panel(GtkWidget *parent)
gtk_widget_show(panel_width); gtk_widget_show(panel_width);
gtk_table_attach(GTK_TABLE(table), panel_width, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); gtk_table_attach(GTK_TABLE(table), panel_width, col, col+1, row, row+1, GTK_FILL, 0, 0, 0);
col++; col++;
gtk_tooltips_set_tip(tooltips, panel_width, "The width of the panel", NULL); gtk_tooltips_set_tip(tooltips, panel_width, "The length of the panel (width for horizontal panels, height for vertical panels)", NULL);
panel_combo_width_type = gtk_combo_box_new_text(); panel_combo_width_type = gtk_combo_box_new_text();
gtk_widget_show(panel_combo_width_type); gtk_widget_show(panel_combo_width_type);
@@ -872,11 +872,11 @@ void create_panel(GtkWidget *parent)
gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_width_type), _("Percent")); gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_width_type), _("Percent"));
gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_width_type), _("Pixels")); gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_width_type), _("Pixels"));
gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_width_type), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_width_type), 0);
gtk_tooltips_set_tip(tooltips, panel_combo_width_type, "The units used to specify the width of the panel: pixels or percentage of the monitor size", NULL); gtk_tooltips_set_tip(tooltips, panel_combo_width_type, "The units used to specify the length of the panel: pixels or percentage of the monitor size", NULL);
row++; row++;
col = 2; col = 2;
label = gtk_label_new(_("Height")); label = gtk_label_new(_("Size"));
gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
gtk_widget_show(label); gtk_widget_show(label);
gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); gtk_table_attach(GTK_TABLE(table), label, col, col+1, row, row+1, GTK_FILL, 0, 0, 0);
@@ -886,7 +886,7 @@ void create_panel(GtkWidget *parent)
gtk_widget_show(panel_height); gtk_widget_show(panel_height);
gtk_table_attach(GTK_TABLE(table), panel_height, col, col+1, row, row+1, GTK_FILL, 0, 0, 0); gtk_table_attach(GTK_TABLE(table), panel_height, col, col+1, row, row+1, GTK_FILL, 0, 0, 0);
col++; col++;
gtk_tooltips_set_tip(tooltips, panel_height, "The height of the panel", NULL); gtk_tooltips_set_tip(tooltips, panel_height, "The size of the panel (height for horizontal panels, width for vertical panels)", NULL);
panel_combo_height_type = gtk_combo_box_new_text(); panel_combo_height_type = gtk_combo_box_new_text();
gtk_widget_show(panel_combo_height_type); gtk_widget_show(panel_combo_height_type);
@@ -895,7 +895,7 @@ void create_panel(GtkWidget *parent)
gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_height_type), _("Percent")); gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_height_type), _("Percent"));
gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_height_type), _("Pixels")); gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_height_type), _("Pixels"));
gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_height_type), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_height_type), 0);
gtk_tooltips_set_tip(tooltips, panel_combo_height_type, "The units used to specify the height of the panel: pixels or percentage of the monitor size", NULL); gtk_tooltips_set_tip(tooltips, panel_combo_height_type, "The units used to specify the size of the panel: pixels or percentage of the monitor size", NULL);
row++; row++;
col = 2; col = 2;
@@ -1203,7 +1203,10 @@ void create_panel(GtkWidget *parent)
"Match the panel size means that maximized windows should extend to the edge of the panel. \n" "Match the panel size means that maximized windows should extend to the edge of the panel. \n"
"Match the hidden panel size means that maximized windows should extend to the edge of the panel when hidden; " "Match the hidden panel size means that maximized windows should extend to the edge of the panel when hidden; "
"when visible, the panel and the windows will overlap. \n" "when visible, the panel and the windows will overlap. \n"
"Fill the screen means that maximized windows will always have the same size as the screen.", NULL); "Fill the screen means that maximized windows will always have the same size as the screen. \n"
"\n"
"Note: on multi-monitor (Xinerama) setups, the panel must be placed at the edge (not in the middle) "
"of the virtual screen for this to work correctly.", NULL);
row++; row++;
col = 2; col = 2;

View File

@@ -1,4 +1,3 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -625,6 +624,8 @@ void config_save_file(const char *path) {
unsigned short checksum = 0; unsigned short checksum = 0;
fprintf(fp, "#---- Generated by tint2conf %04x ----\n", checksum); fprintf(fp, "#---- Generated by tint2conf %04x ----\n", checksum);
fprintf(fp, "# See https://gitlab.com/o9000/tint2/wikis/Configure for \n");
fprintf(fp, "# full documentation of the configuration options.\n");
config_write_backgrounds(fp); config_write_backgrounds(fp);
config_write_panel(fp); config_write_panel(fp);

View File

@@ -1,148 +1,58 @@
[Desktop Entry] [Desktop Entry]
Type=Application Type=Application
Name=Panel tint2 Name=Tint2 panel settings
Name[am]=ፓነል tint2 Name[am]=ፓነል አስተዳዳሪ
Name[ar]=الشريط tint2 Name[ar]=مدير الائحة :
Name[ast]=Panel tint2 Name[ast]=Alministrador de panel
Name[be]=Панэль tint2 Name[be]=Кіраўнік Панэляў
Name[ca]=Quadre tint2 Name[ca]=Gestor de quadres
Name[cs]=Panel tint2 Name[cs]=Správce panelu
Name[da]=Panel tint2 Name[da]=Panelhåndtering
Name[de]=Leiste tint2 Name[de]=Leistenverwaltung
Name[dz]=པེ་ནཱལ། tint2 Name[dz]=པེ་ནཱལ་འཛིན་སྐྱོང་པ།
Name[el]=Ταμπλό tint2 Name[el]=Διαχειριστής ταμπλό
Name[en_GB]=Panel tint2 Name[en_GB]=Panel Manager
Name[eo]=Panelo tint2 Name[eo]=Administrilo de Panelo
Name[es]=Panel tint2 Name[es]=Administrador de panel
Name[et]=Ääreriba tint2 Name[et]=Paneelihaldur
Name[eu]=Panela tint2 Name[eu]=Panel Kudeatzailea:
Name[fi]=Paneeli tint2 Name[fi]=Paneelin hallinta
Name[fr]=Panneau tint2 Name[fr]=Gestionnaire de panneau
Name[gl]=Panel tint2 Name[gl]=Xestor de paneis
Name[he]=לוח tint2 Name[he]=מנהל הלוח
Name[hu]=Panel tint2 Name[hu]=Panelkezelő
Name[id]=Panel tint2 Name[id]=Manajer Panel
Name[it]=Pannello tint2 Name[it]=Gestore dei pannelli
Name[ja]=パネル tint2 Name[ja]=パネルマネージャ
Name[kk]=Панель tint2 Name[kk]=Панель менеджері
Name[ko]=패널 tint2 Name[ko]=패널 관리자
Name[ku]=Panel tint2 Name[ku]=Gerinendeyê panelan
Name[lv]=Panelis tint2 Name[lv]=Paneļu pārvaldnieks
Name[mk]=Панел tint2 Name[mk]=Менаџер за панели
Name[nb]=Panel tint2 Name[nb]=Panelbehandler
Name[nl]=Paneel tint2 Name[nl]=Paneel Manager
Name[nn]=Panel tint2 Name[nn]=Panelhandsamar
Name[pa]=ਪੈਨਲ tint2 Name[pa]=ਪੈਨਲ ਮੈਨੇਜਰ
Name[pl]=Panel tint2 Name[pl]=Panel
Name[pt]=Painel tint2 Name[pt]=Gestor do Painel
Name[pt_BR]=Painel tint2 Name[pt_BR]=Gerenciador do painel
Name[ro]=Panou tint2 Name[ro]=Manager de panouri
Name[ru]=Панель tint2 Name[ru]=Диспетчер панелей
Name[si]=පුවරුව tint2 Name[si]=පුවරු කළමණාකරු
Name[sk]=Panel tint2 Name[sk]=Nastavenie panelu
Name[sq]=Panel tint2 Name[sq]=Përgjegjës Panelesh
Name[sv]=Panel tint2 Name[sv]=Panelhanterare
Name[ta]=பலகை tint2 Name[ta]=பலகை மேளாலர்:
Name[tr]=Panel tint2 Name[tr]=Panel Yöneticisi
Name[ug]=panel tint2 Name[ug]=Panel باشقۇرغۇ
Name[uk]=Панель tint2 Name[uk]=Менеджер панелей
Name[ur]=پینل tint2 Name[ur]=پینل منیجر
Name[ur_PK]=پینل tint2 Name[ur_PK]=پینل منیجر
Name[vi]=Panel tint2 Name[vi]=Quản lý panel
Name[zh_CN]=面板 tint2 Name[zh_CN]=面板管理器
Name[zh_TW]=面板 tint2 Name[zh_TW]=面板管理程式
GenericName=Panel Manager
GenericName[am]=ፓነል አስተዳዳሪ
GenericName[ar]=مدير الائحة :
GenericName[ast]=Alministrador de panel
GenericName[be]=Кіраўнік Панэляў
GenericName[ca]=Gestor de quadres
GenericName[cs]=Správce panelu
GenericName[da]=Panelhåndtering
GenericName[de]=Leistenverwaltung
GenericName[dz]=པེ་ནཱལ་འཛིན་སྐྱོང་པ།
GenericName[el]=Διαχειριστής ταμπλό
GenericName[en_GB]=Panel Manager
GenericName[eo]=Administrilo de Panelo
GenericName[es]=Administrador de panel
GenericName[et]=Paneelihaldur
GenericName[eu]=Panel Kudeatzailea:
GenericName[fi]=Paneelin hallinta
GenericName[fr]=Gestionnaire de panneau
GenericName[gl]=Xestor de paneis
GenericName[he]=מנהל הלוח
GenericName[hu]=Panelkezelő
GenericName[id]=Manajer Panel
GenericName[it]=Gestore dei pannelli
GenericName[ja]=パネルマネージャ
GenericName[kk]=Панель менеджері
GenericName[ko]=패널 관리자
GenericName[ku]=Gerinendeyê panelan
GenericName[lv]=Paneļu pārvaldnieks
GenericName[mk]=Менаџер за панели
GenericName[nb]=Panelbehandler
GenericName[nl]=Paneel Manager
GenericName[nn]=Panelhandsamar
GenericName[pa]=ਪੈਨਲ ਮੈਨੇਜਰ
GenericName[pl]=Panel
GenericName[pt]=Gestor do Painel
GenericName[pt_BR]=Gerenciador do painel
GenericName[ro]=Manager de panouri
GenericName[ru]=Диспетчер панелей
GenericName[si]=පුවරු කළමණාකරු
GenericName[sk]=Nastavenie panelu
GenericName[sq]=Përgjegjës Panelesh
GenericName[sv]=Panelhanterare
GenericName[ta]=பலகை மேளாலர்:
GenericName[tr]=Panel Yöneticisi
GenericName[ug]=Panel باشقۇرغۇ
GenericName[uk]=Менеджер панелей
GenericName[ur]=پینل منیجر
GenericName[ur_PK]=پینل منیجر
GenericName[vi]=Quản lý panel
GenericName[zh_CN]=面板管理器
GenericName[zh_TW]=面板管理程式
Comment=Customize the panel settings
Comment[ast]=Personalice la configuración del panel
Comment[ca]=Personalitza els ajustaments del quadre
Comment[cs]=Přizpůsobit nastavení panelu
Comment[da]=Tilpas panelets indstillinger
Comment[de]=Leiste anpassen
Comment[el]=Προσαρμογή ρυθμίσεων ταμπλό
Comment[en_GB]=Customise the panel settings
Comment[es]=Personalice la configuración del panel
Comment[et]=Ääreriba seadistamine käepäraseks
Comment[eu]=Pertsonalizatu panel ezapenak
Comment[fi]=Mukauta paneelin asetuksia
Comment[fr]=Configurer le panneau
Comment[gl]=Personalizar a configuración do panel
Comment[hu]=A panel beállításainak személyre szabása
Comment[id]=Kustomisasi pengaturan panel
Comment[it]=Personalizzazione delle impostazioni del pannello
Comment[ja]=パネルの設定をカスタマイズします
Comment[kk]=Панельді баптау
Comment[lv]=Pielāgot paneļa uzstādījumus
Comment[nb]=Tilpass panelet
Comment[nl]=Paneel configureren
Comment[nn]=Tilpass innstillingane for panelet
Comment[pl]=Konfiguruje ustawienia paneli
Comment[pt]=Personalizar as definições do painel
Comment[pt_BR]=Personalizar as configurações do painel
Comment[ro]=Schimbați opțiunile panoului
Comment[ru]=Настроить панель
Comment[si]=පුවරු සිටුවම් සකසන්න
Comment[sk]=Prispôsobiť nastavenia panelu
Comment[sq]=Përshtasni rregullimet për panelin
Comment[sv]=Anpassa panelinställningarna
Comment[ta]=நிரல்பலகை அமைப்பை தன்விருப்பமாற்றம் செய்க
Comment[tr]=Panel ayarlarını özelleştir
Comment[ug]=panel تەڭشىكىنى Customize قىلىش
Comment[uk]=Налаштувати властивості панелі
Comment[ur]=پینل کی ترتیبات
Comment[ur_PK]=پینل کی ترتیبات
Comment[zh_CN]=自定义面板设置
Exec=tint2conf Exec=tint2conf
Icon=taskbar Icon=tint2conf
Terminal=false Terminal=false
Categories=Settings;DesktopSettings; Categories=Settings;DesktopSettings;

509
src/tint2conf/tint2conf.svg Normal file
View File

@@ -0,0 +1,509 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="48"
height="48"
id="svg1325"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="tint2conf.svg"
inkscape:export-filename="/home/omega_dist/4_devel_open_source/9_tint/tint2/src/tint2conf/tint2conf.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata50">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1768"
inkscape:window-height="1056"
id="namedview48"
showgrid="false"
inkscape:zoom="16"
inkscape:cx="30.824904"
inkscape:cy="2.1959811"
inkscape:window-x="152"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g3841" />
<defs
id="defs1327">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 24 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="48 : 24 : 1"
inkscape:persp3d-origin="24 : 16 : 1"
id="perspective52" />
<linearGradient
id="linearGradient4708">
<stop
id="stop4710"
style="stop-color:white;stop-opacity:1"
offset="0" />
<stop
id="stop4712"
style="stop-color:black;stop-opacity:1"
offset="0.57954973" />
<stop
id="stop4714"
style="stop-color:black;stop-opacity:1"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient2270">
<stop
id="stop2272"
style="stop-color:white;stop-opacity:1"
offset="0" />
<stop
id="stop2274"
style="stop-color:white;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
x1="20"
y1="18"
x2="20"
y2="46"
id="linearGradient2851"
xlink:href="#linearGradient2270"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-9.9999992)" />
<linearGradient
x1="30"
y1="17"
x2="30"
y2="47"
id="linearGradient2854"
xlink:href="#linearGradient2181"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-9.9999992)" />
<linearGradient
x1="63.397362"
y1="-12.489107"
x2="63.397362"
y2="5.4675598"
id="linearGradient2685"
xlink:href="#linearGradient4873"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5436509,0,0,1.5436158,-80.015712,21.419381)" />
<linearGradient
id="linearGradient4873">
<stop
id="stop4875"
style="stop-color:white;stop-opacity:1"
offset="0" />
<stop
id="stop4877"
style="stop-color:white;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
cx="23.895569"
cy="3.9900031"
r="20.397499"
fx="23.895569"
fy="3.9900031"
id="radialGradient2688"
xlink:href="#linearGradient3242-187-536"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,1.7008781,-2.245129,0,24.958071,-40.236051)" />
<linearGradient
id="linearGradient3242-187-536">
<stop
id="stop2778"
style="stop-color:#8badea;stop-opacity:1"
offset="0" />
<stop
id="stop2780"
style="stop-color:#6396cd;stop-opacity:1"
offset="0.26238" />
<stop
id="stop2782"
style="stop-color:#3b7caf;stop-opacity:1"
offset="0.66093999" />
<stop
id="stop2784"
style="stop-color:#194c70;stop-opacity:1"
offset="1" />
</linearGradient>
<linearGradient
x1="18.379412"
y1="44.980297"
x2="18.379412"
y2="3.0816143"
id="linearGradient2690"
xlink:href="#linearGradient2490-182-124"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7126612,0,0,0.7126613,-1.1038706,-1.1038704)" />
<linearGradient
id="linearGradient2490-182-124">
<stop
id="stop2788"
style="stop-color:#1f4b6a;stop-opacity:1"
offset="0" />
<stop
id="stop2790"
style="stop-color:#4083c2;stop-opacity:1"
offset="1" />
</linearGradient>
<radialGradient
cx="62.625"
cy="4.625"
r="10.625"
fx="62.625"
fy="4.625"
id="radialGradient2693"
xlink:href="#linearGradient8838"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5058824,0,0,0.37647,-78.305888,26.258824)" />
<linearGradient
id="linearGradient8838">
<stop
id="stop8840"
style="stop-color:black;stop-opacity:1"
offset="0" />
<stop
id="stop8842"
style="stop-color:black;stop-opacity:0"
offset="1" />
</linearGradient>
<linearGradient
id="linearGradient2181">
<stop
id="stop2183"
style="stop-color:#f0f0f0;stop-opacity:1"
offset="0" />
<stop
id="stop2185"
style="stop-color:#d3d3d3;stop-opacity:1"
offset="1" />
</linearGradient>
<linearGradient
x1="50.23077"
y1="22"
x2="53"
y2="22"
id="linearGradient4720"
xlink:href="#linearGradient4708"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.3333333,0,0,1,-176.66667,0)" />
<mask
id="mask4716">
<rect
width="52"
height="32"
x="1"
y="6"
id="rect4718"
style="fill:url(#linearGradient4720);fill-opacity:1;stroke:none" />
</mask>
<linearGradient
x1="50.23077"
y1="22"
x2="53"
y2="22"
id="linearGradient4726"
xlink:href="#linearGradient4708"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.3333333,0,0,1,-176.66667,0)" />
<mask
id="mask4722">
<rect
width="52"
height="32"
x="1"
y="6"
id="rect4724"
style="fill:url(#linearGradient4726);fill-opacity:1;stroke:none" />
</mask>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4873"
id="linearGradient2861"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.8085571,0,0,0.74493792,-86.459085,24.622683)"
x1="63.397362"
y1="-12.489107"
x2="63.397362"
y2="5.4675598" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3242-187-536"
id="radialGradient2864"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.82083158,-2.630416,0,36.52927,-5.1317867)"
cx="23.895569"
cy="3.9900031"
fx="23.895569"
fy="3.9900031"
r="20.397499" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2490-182-124"
id="linearGradient2866"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.83496113,0,0,0.34392523,5.994833,13.753123)"
x1="18.379412"
y1="44.980297"
x2="18.379412"
y2="3.0816143" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8838"
id="radialGradient2869"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7643072,0,0,0.18168172,-84.455838,26.958163)"
cx="62.625"
cy="4.625"
fx="62.625"
fy="4.625"
r="10.625" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient8838"
id="radialGradient2876"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.7643072,0,0,0.18168172,-84.455838,26.958163)"
cx="62.625"
cy="4.625"
fx="62.625"
fy="4.625"
r="10.625" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3242-187-536"
id="radialGradient2878"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.82083158,-2.630416,0,36.52927,-5.1317867)"
cx="23.895569"
cy="3.9900031"
fx="23.895569"
fy="3.9900031"
r="20.397499" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2490-182-124"
id="linearGradient2880"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.83496113,0,0,0.34392523,5.994833,13.753123)"
x1="18.379412"
y1="44.980297"
x2="18.379412"
y2="3.0816143" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4873"
id="linearGradient2882"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.8085571,0,0,0.74493792,-86.459085,24.622683)"
x1="63.397362"
y1="-12.489107"
x2="63.397362"
y2="5.4675598" />
<inkscape:perspective
id="perspective2924"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
x1="30"
y1="17"
x2="30"
y2="47"
id="linearGradient2854-0"
xlink:href="#linearGradient2181-7"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-9.9999992)" />
<linearGradient
id="linearGradient2181-7">
<stop
id="stop2183-8"
style="stop-color:#f0f0f0;stop-opacity:1"
offset="0" />
<stop
id="stop2185-6"
style="stop-color:#d3d3d3;stop-opacity:1"
offset="1" />
</linearGradient>
<mask
id="mask4722-8">
<rect
width="52"
height="32"
x="1"
y="6"
id="rect4724-8"
style="fill:url(#linearGradient4726-4);fill-opacity:1;stroke:none" />
</mask>
<linearGradient
x1="50.23077"
y1="22"
x2="53"
y2="22"
id="linearGradient4726-4"
xlink:href="#linearGradient4708-3"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.3333333,0,0,1,-176.66667,0)" />
<linearGradient
id="linearGradient4708-3">
<stop
id="stop4710-1"
style="stop-color:white;stop-opacity:1"
offset="0" />
<stop
id="stop4712-4"
style="stop-color:black;stop-opacity:1"
offset="0.57954973" />
<stop
id="stop4714-9"
style="stop-color:black;stop-opacity:1"
offset="1" />
</linearGradient>
<linearGradient
y2="47"
x2="30"
y1="17"
x1="30"
gradientTransform="translate(0,-9.9999992)"
gradientUnits="userSpaceOnUse"
id="linearGradient2940"
xlink:href="#linearGradient2181-7"
inkscape:collect="always" />
<inkscape:perspective
id="perspective2894"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<rect
width="46"
height="29"
x="2.5"
y="7.5"
mask="url(#mask4722)"
id="rect1333"
style="fill:url(#linearGradient2854);fill-opacity:1;stroke:#2c2c2c;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
transform="translate(-0.20338983,3.4237288)" />
<rect
width="45"
height="27"
x="3.5"
y="8.5"
mask="url(#mask4716)"
id="rect2210"
style="opacity:0.7;fill:none;stroke:url(#linearGradient2851);stroke-width:0.99999976;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
transform="translate(-0.20338983,3.4237288)" />
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#333424;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0.69999999999999996"
id="rect6306"
width="29.45332"
height="9.5719652"
x="10.697065"
y="21.044527"
rx="1.4456253"
ry="1.6443363" />
<g
id="g3841"
transform="translate(130.875,44.5)">
<path
sodipodi:nodetypes="csscccsscc"
inkscape:connector-curvature="0"
id="path3833"
d="M -71.433946,14.735703 C -80.071947,4.6612321 -89.248707,-5.737975 -92.147263,-9.1977463 c -3.224562,-3.8488997 -3.263797,-3.3549747 -1.493188,-4.5254517 l 1.278694,-0.845292 14.113986,16.2862263 14.113987,16.2862257 -1.004295,0.889458 c -0.552362,0.489201 -1.149443,0.973153 -1.326848,1.075448 -0.259255,0.149489 -1.234399,-0.877491 -4.969019,-5.233165 z"
style="fill:#87aade" />
<path
sodipodi:nodetypes="cscsssc"
inkscape:connector-curvature="0"
id="path3825"
d="m -98.105823,-13.116897 c -0.09278,-0.307786 -1.541317,-8.963836 -1.697567,-8.726554 -0.0244,0.03706 7.876058,3.167414 7.876435,3.661796 0.27526,-0.22635 0.628731,0.02647 0.174381,0.954172 -0.406614,0.830238 -0.712942,1.441488 -2.270947,2.615226 -0.993109,0.748168 -2.553662,1.682052 -2.971367,1.846131 -0.688741,0.270545 -1.081414,0.266981 -1.110935,-0.350771 z"
style="fill:#e9c6af" />
<path
sodipodi:nodetypes="scscscsss"
inkscape:connector-curvature="0"
id="path3831"
d="m -77.291221,0.7427987 -14.60455,-16.3513767 0.637035,-0.730536 c 0.266185,-0.305255 0.324002,-1.389769 0.39974,-1.43161 0.07574,-0.04184 6.588518,8.0823714 14.511041,17.25171965 l 14.404588,16.67154235 -0.456991,0.486444 c -0.251345,0.267543 -0.509994,0.486443 -0.574776,0.486443 -0.06478,0 -6.507022,-7.3721814 -14.316087,-16.3826263 z"
style="fill:#afc6e9" />
<path
sodipodi:nodetypes="sssssscs"
inkscape:connector-curvature="0"
id="path3835"
d="m -72.642373,17.731344 c -15.785516,-18.3468257 -22.67882,-27.078419 -24.317731,-29.175546 -0.237129,-0.303427 -0.02287,-0.396673 0.25262,-0.547032 0.446221,-0.24354 0.48891,-0.24519 1.064375,0.556916 0.626398,0.873099 10.342493,12.0396466 21.114327,24.608034 6.242539,7.283685 7.651572,8.214809 7.295404,8.484526 -0.209506,0.158654 -1.332932,1.444171 -1.357614,0.66226 -0.39968,0.56189 -2.205614,-2.443908 -4.051381,-4.589158 z"
style="fill:#3771c8" />
<path
inkscape:connector-curvature="0"
id="path3837"
d="m -99.864407,-18.915254 3.050848,-2.237288"
style="fill:#0b2822;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path3049"
d="m -98.144068,-11.76536 29.460805,34.842161 7.728814,-6.711865 -29.898305,-34.576271"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path3823"
d="m -98.112288,-12.03125 2.174788,-0.688559 3.864407,-2.847458 1.079449,-2.691208 -9.621826,-4.630826 z"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccscccsscc"
inkscape:connector-curvature="0"
id="path3827"
d="m -80.955348,4.2773755 c -7.750968,-9.0443333 -14.97509,-16.8628515 -14.945966,-16.9543465 0.02912,-0.09149 1.512719,-0.624766 2.1979,-1.135322 l 1.426197,-1.062718 14.171177,16.60582 14.202426,16.387071 -0.88474,0.775212 c -0.486606,0.426368 -1.11724,0.948927 -1.401408,1.161244 l -0.516667,0.386032 z"
style="fill:#5f8dd3" />
<path
inkscape:connector-curvature="0"
id="path3829"
d="m -83.124992,5.0906125 c -7.869016,-9.1612493 -14.285686,-16.7328745 -14.259267,-16.8258325 0.02642,-0.09296 0.288522,-0.270134 0.582452,-0.393722 0.525603,-0.220999 0.770084,0.05025 14.820977,16.4434263 l 14.286559,16.6681317 -0.492096,0.387084 c -0.270652,0.212894 -0.523421,0.384976 -0.561709,0.382405 -0.03829,-0.0026 -6.507899,-7.500244 -14.376916,-16.6614925 l 0,0 z"
style="fill:#3771c8" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path3051"
d="m -96.265889,-12.891949 29.350635,34.044492"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3053"
d="m -92.338983,-15.661017 29.084746,33.559322"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="scscccccs"
inkscape:connector-curvature="0"
id="path3839"
d="m -100.69352,-20.893751 c -0.0917,-0.34644 -0.71612,-3.00338 -0.8271,-3.157561 0.0437,-0.0437 2.636115,1.39898 2.993406,1.577103 l 1.143051,0.524237 -0.435163,0.963572 -0.709103,0.627398 -0.787319,0.476477 -1.110472,0.181053 c 0.17185,0.510627 -0.0972,-0.549821 -0.2673,-1.192279 z"
style="fill:#5f8dd3;fill-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -76,7 +76,7 @@ void init_rendering(void *obj, int pos)
Area *a = (Area*)obj; Area *a = (Area*)obj;
// initialize fixed position/size // initialize fixed position/size
GSList *l; GList *l;
for (l = a->list; l ; l = l->next) { for (l = a->list; l ; l = l->next) {
Area *child = ((Area*)l->data); Area *child = ((Area*)l->data);
if (panel_horizontal) { if (panel_horizontal) {
@@ -102,7 +102,7 @@ void rendering(void *obj)
Panel *panel = (Panel*)obj; Panel *panel = (Panel*)obj;
size_by_content(&panel->area); size_by_content(&panel->area);
size_by_layout(&panel->area, 0, 1); size_by_layout(&panel->area, 1);
refresh(&panel->area); refresh(&panel->area);
} }
@@ -111,10 +111,11 @@ void rendering(void *obj)
void size_by_content (Area *a) void size_by_content (Area *a)
{ {
// don't resize hiden objects // don't resize hiden objects
if (!a->on_screen) return; if (!a->on_screen)
return;
// children node are resized before its parent // children node are resized before its parent
GSList *l; GList *l;
for (l = a->list; l ; l = l->next) for (l = a->list; l ; l = l->next)
size_by_content(l->data); size_by_content(l->data);
@@ -134,14 +135,21 @@ void size_by_content (Area *a)
} }
void size_by_layout (Area *a, int pos, int level) void size_by_layout (Area *a, int level)
{ {
// don't resize hiden objects // don't resize hiden objects
if (!a->on_screen) return; if (!a->on_screen)
return;
if (a == &panel1->taskbar[0]) {
printf("%s %d: Taskbar 0: y=%d, h=%d, b=%d\n", __FUNCTION__, __LINE__, a->posy, a->height, a->posy + a->height);
} else if (a == &panel1->taskbar[1]) {
printf("%s %d: Taskbar 1: y=%d, h=%d, b=%d\n", __FUNCTION__, __LINE__, a->posy, a->height, a->posy + a->height);
}
// parent node is resized before its children // parent node is resized before its children
// calculate area's size // calculate area's size
GSList *l; GList *l;
if (a->resize && a->size_mode == SIZE_BY_LAYOUT) { if (a->resize && a->size_mode == SIZE_BY_LAYOUT) {
a->resize = 0; a->resize = 0;
@@ -156,13 +164,15 @@ void size_by_layout (Area *a, int pos, int level)
} }
} }
// update position of childs // update position of children
pos += a->paddingxlr + a->bg->border.width; if (a->list) {
int i=0; if (a->alignment == ALIGN_LEFT) {
int pos = (panel_horizontal ? a->posx : a->posy) + a->bg->border.width + a->paddingxlr;
for (l = a->list; l ; l = l->next) { for (l = a->list; l ; l = l->next) {
Area *child = ((Area*)l->data); Area *child = ((Area*)l->data);
if (!child->on_screen) continue; if (!child->on_screen)
i++; continue;
if (panel_horizontal) { if (panel_horizontal) {
if (pos != child->posx) { if (pos != child->posx) {
@@ -170,8 +180,7 @@ void size_by_layout (Area *a, int pos, int level)
child->posx = pos; child->posx = pos;
child->on_changed = 1; child->on_changed = 1;
} }
} } else {
else {
if (pos != child->posy) { if (pos != child->posy) {
// pos changed => redraw // pos changed => redraw
child->posy = pos; child->posy = pos;
@@ -179,16 +188,78 @@ void size_by_layout (Area *a, int pos, int level)
} }
} }
/*// position of each visible object size_by_layout(child, level+1);
int k;
for (k=0 ; k < level ; k++) printf(" ");
printf("tree level %d, object %d, pos %d, %s\n", level, i, pos, (child->size_mode == SIZE_BY_LAYOUT) ? "SIZE_BY_LAYOUT" : "SIZE_BY_CONTENT");*/
size_by_layout(child, pos, level+1);
if (panel_horizontal) pos += panel_horizontal ? child->width + a->paddingx : child->height + a->paddingx;
pos += child->width + a->paddingx; }
else } else if (a->alignment == ALIGN_RIGHT) {
pos += child->height + a->paddingx; int pos = (panel_horizontal ? a->posx + a->width : a->posy + a->height) - a->bg->border.width - a->paddingxlr;
for (l = g_list_last(a->list); l ; l = l->prev) {
Area *child = ((Area*)l->data);
if (!child->on_screen)
continue;
pos -= panel_horizontal ? child->width : child->height;
if (panel_horizontal) {
if (pos != child->posx) {
// pos changed => redraw
child->posx = pos;
child->on_changed = 1;
}
} else {
if (pos != child->posy) {
// pos changed => redraw
child->posy = pos;
child->on_changed = 1;
}
}
size_by_layout(child, level+1);
pos -= a->paddingx;
}
} else if (a->alignment == ALIGN_CENTER) {
int children_size = 0;
for (l = a->list; l ; l = l->next) {
Area *child = ((Area*)l->data);
if (!child->on_screen)
continue;
children_size += panel_horizontal ? child->width : child->height;
children_size += (l == a->list) ? 0 : a->paddingx;
}
int pos = (panel_horizontal ? a->posx : a->posy) + a->bg->border.width + a->paddingxlr;
pos += ((panel_horizontal ? a->width : a->height) - children_size) / 2;
for (l = a->list; l ; l = l->next) {
Area *child = ((Area*)l->data);
if (!child->on_screen)
continue;
if (panel_horizontal) {
if (pos != child->posx) {
// pos changed => redraw
child->posx = pos;
child->on_changed = 1;
}
} else {
if (pos != child->posy) {
// pos changed => redraw
child->posy = pos;
child->on_changed = 1;
}
}
size_by_layout(child, level+1);
pos += panel_horizontal ? child->width + a->paddingx : child->height + a->paddingx;
}
}
} }
if (a->on_changed) { if (a->on_changed) {
@@ -222,7 +293,7 @@ void refresh (Area *a)
XCopyArea (server.dsp, a->pix, ((Panel *)a->panel)->temp_pmap, server.gc, 0, 0, a->width, a->height, a->posx, a->posy); XCopyArea (server.dsp, a->pix, ((Panel *)a->panel)->temp_pmap, server.gc, 0, 0, a->width, a->height, a->posx, a->posy);
// and then refresh child object // and then refresh child object
GSList *l; GList *l;
for (l = a->list; l ; l = l->next) for (l = a->list; l ; l = l->next)
refresh(l->data); refresh(l->data);
} }
@@ -236,7 +307,7 @@ int resize_by_layout(void *obj, int maximum_size)
if (panel_horizontal) { if (panel_horizontal) {
// detect free size for SIZE_BY_LAYOUT's Area // detect free size for SIZE_BY_LAYOUT's Area
size = a->width - (2 * (a->paddingxlr + a->bg->border.width)); size = a->width - (2 * (a->paddingxlr + a->bg->border.width));
GSList *l; GList *l;
for (l = a->list ; l ; l = l->next) { for (l = a->list ; l ; l = l->next) {
child = (Area*)l->data; child = (Area*)l->data;
if (child->on_screen && child->size_mode == SIZE_BY_CONTENT) { if (child->on_screen && child->size_mode == SIZE_BY_CONTENT) {
@@ -278,7 +349,7 @@ int resize_by_layout(void *obj, int maximum_size)
else { else {
// detect free size for SIZE_BY_LAYOUT's Area // detect free size for SIZE_BY_LAYOUT's Area
size = a->height - (2 * (a->paddingxlr + a->bg->border.width)); size = a->height - (2 * (a->paddingxlr + a->bg->border.width));
GSList *l; GList *l;
for (l = a->list ; l ; l = l->next) { for (l = a->list ; l ; l = l->next) {
child = (Area*)l->data; child = (Area*)l->data;
if (child->on_screen && child->size_mode == SIZE_BY_CONTENT) { if (child->on_screen && child->size_mode == SIZE_BY_CONTENT) {
@@ -291,7 +362,7 @@ int resize_by_layout(void *obj, int maximum_size)
if (nb_by_content+nb_by_layout) if (nb_by_content+nb_by_layout)
size -= ((nb_by_content+nb_by_layout-1) * a->paddingx); size -= ((nb_by_content+nb_by_layout-1) * a->paddingx);
int height=0, modulo=0, old_height; int height=0, modulo=0;
if (nb_by_layout) { if (nb_by_layout) {
height = size / nb_by_layout; height = size / nb_by_layout;
modulo = size % nb_by_layout; modulo = size % nb_by_layout;
@@ -305,8 +376,13 @@ int resize_by_layout(void *obj, int maximum_size)
for (l = a->list ; l ; l = l->next) { for (l = a->list ; l ; l = l->next) {
child = (Area*)l->data; child = (Area*)l->data;
if (child->on_screen && child->size_mode == SIZE_BY_LAYOUT) { if (child->on_screen && child->size_mode == SIZE_BY_LAYOUT) {
old_height = child->height; int old_height = child->height;
child->height = height; child->height = height;
if (child == &panel1->taskbar[0]) {
printf("Taskbar 0: y=%d, h=%d, b=%d\n", child->posy, child->height, child->posy + child->height);
} else if (child == &panel1->taskbar[1]) {
printf("Taskbar 1: y=%d, h=%d, b=%d\n", child->posy, child->height, child->posy + child->height);
}
if (modulo) { if (modulo) {
child->height++; child->height++;
modulo--; modulo--;
@@ -324,7 +400,7 @@ void set_redraw (Area *a)
{ {
a->redraw = 1; a->redraw = 1;
GSList *l; GList *l;
for (l = a->list ; l ; l = l->next) for (l = a->list ; l ; l = l->next)
set_redraw(l->data); set_redraw(l->data);
} }
@@ -438,7 +514,7 @@ void remove_area (Area *a)
{ {
Area *parent = (Area*)a->parent; Area *parent = (Area*)a->parent;
parent->list = g_slist_remove(parent->list, a); parent->list = g_list_remove(parent->list, a);
set_redraw (parent); set_redraw (parent);
} }
@@ -448,7 +524,7 @@ void add_area (Area *a)
{ {
Area *parent = (Area*)a->parent; Area *parent = (Area*)a->parent;
parent->list = g_slist_append(parent->list, a); parent->list = g_list_append(parent->list, a);
set_redraw (parent); set_redraw (parent);
} }
@@ -459,12 +535,12 @@ void free_area (Area *a)
if (!a) if (!a)
return; return;
GSList *l0; GList *l0;
for (l0 = a->list; l0 ; l0 = l0->next) for (l0 = a->list; l0 ; l0 = l0->next)
free_area (l0->data); free_area (l0->data);
if (a->list) { if (a->list) {
g_slist_free(a->list); g_list_free(a->list);
a->list = 0; a->list = 0;
} }
if (a->pix) { if (a->pix) {

View File

@@ -52,6 +52,8 @@ typedef struct
// SIZE_BY_CONTENT objects : clock, battery, launcher, systray // SIZE_BY_CONTENT objects : clock, battery, launcher, systray
enum { SIZE_BY_LAYOUT, SIZE_BY_CONTENT }; enum { SIZE_BY_LAYOUT, SIZE_BY_CONTENT };
enum { ALIGN_LEFT = 0, ALIGN_CENTER = 1, ALIGN_RIGHT = 2 };
typedef struct { typedef struct {
// coordinate relative to panel window // coordinate relative to panel window
int posx, posy; int posx, posy;
@@ -61,13 +63,15 @@ typedef struct {
Background *bg; Background *bg;
// list of child : Area object // list of child : Area object
GSList *list; GList *list;
// object visible on screen. // object visible on screen.
// An object (like systray) could be enabled but hidden (because no tray icon). // An object (like systray) could be enabled but hidden (because no tray icon).
int on_screen; int on_screen;
// way to calculate the size (SIZE_BY_CONTENT or SIZE_BY_LAYOUT) // way to calculate the size (SIZE_BY_CONTENT or SIZE_BY_LAYOUT)
int size_mode; int size_mode;
int alignment;
// need to calculate position and width // need to calculate position and width
int resize; int resize;
// need redraw Pixmap // need redraw Pixmap
@@ -96,7 +100,7 @@ void init_rendering(void *obj, int pos);
void rendering(void *obj); void rendering(void *obj);
void size_by_content (Area *a); void size_by_content (Area *a);
void size_by_layout (Area *a, int pos, int level); void size_by_layout (Area *a, int level);
// draw background and foreground // draw background and foreground
void refresh (Area *a); void refresh (Area *a);

60
tint2.desktop Normal file
View File

@@ -0,0 +1,60 @@
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Tint2 panel
Name[am]=ፓነል tint2
Name[ar]=الشريط tint2
Name[ast]=Panel tint2
Name[be]=Панэль tint2
Name[ca]=Quadre tint2
Name[cs]=Panel tint2
Name[da]=Panel tint2
Name[de]=Leiste tint2
Name[dz]=པེ་ནཱལ། tint2
Name[el]=Ταμπλό tint2
Name[en_GB]=Panel tint2
Name[eo]=Panelo tint2
Name[es]=Panel tint2
Name[et]=Ääreriba tint2
Name[eu]=Panela tint2
Name[fi]=Paneeli tint2
Name[fr]=Panneau tint2
Name[gl]=Panel tint2
Name[he]=לוח tint2
Name[hu]=Panel tint2
Name[id]=Panel tint2
Name[it]=Pannello tint2
Name[ja]=パネル tint2
Name[kk]=Панель tint2
Name[ko]=패널 tint2
Name[ku]=Panel tint2
Name[lv]=Panelis tint2
Name[mk]=Панел tint2
Name[nb]=Panel tint2
Name[nl]=Paneel tint2
Name[nn]=Panel tint2
Name[pa]=ਪੈਨਲ tint2
Name[pl]=Panel tint2
Name[pt]=Painel tint2
Name[pt_BR]=Painel tint2
Name[ro]=Panou tint2
Name[ru]=Панель tint2
Name[si]=පුවරුව tint2
Name[sk]=Panel tint2
Name[sq]=Panel tint2
Name[sv]=Panel tint2
Name[ta]=பலகை tint2
Name[tr]=Panel tint2
Name[ug]=panel tint2
Name[uk]=Панель tint2
Name[ur]=پینل tint2
Name[ur_PK]=پینل tint2
Name[vi]=Panel tint2
Name[zh_CN]=面板 tint2
Name[zh_TW]=面板 tint2
Comment=Lightweight panel
Comment[fr_FR]=Panel léger
Exec=tint2
Icon=taskbar
Terminal=false
Categories=System;

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB