Compare commits

..

14 Commits

Author SHA1 Message Date
o9000
5a5d8fd978 Release 0.12.11 2016-05-14 08:39:54 +02:00
o9000
e09c4a0642 tint2conf: changed window title 2016-05-14 08:16:10 +02:00
o9000
c1eb404095 Update themes 2016-05-09 12:27:27 +02:00
o9000
7b3769da2a Update changelog 2016-05-09 12:22:05 +02:00
o9000
cc49e4026e tint2conf: Update translations 2016-05-09 12:20:31 +02:00
o9000
385f4fd25b tint2conf: Regenerate po files 2016-05-09 12:18:05 +02:00
o9000
6c00321262 tint2conf: Update pot file 2016-05-09 12:17:30 +02:00
o9000
aa77f05a98 tint2conf: Add extension if missing in save as dialog 2016-05-09 12:16:56 +02:00
o9000
ccd590e397 tint2conf: Workaround for a GTK quirk to prevent a crash when adding backgrounds 2016-05-07 20:13:13 +02:00
o9000
4ee1e8f2fa Release 0.12.10 2016-05-07 09:34:12 +02:00
o9000
690f30308f Fixed crash in systray with non-Latin languagess (thanks zcodes) 2016-05-07 00:38:52 +02:00
o9000
fea91746a4 Battery: do not show negative durations when the sensors return garbage 2016-04-23 11:54:38 +02:00
o9000
9d8350dabc Invalidate cached pixmaps on resize/move (issue #576) 2016-04-22 23:47:28 +02:00
o9000
a6879ea2a5 Proper workaround for issue #555 2016-04-22 23:16:26 +02:00
22 changed files with 1566 additions and 1611 deletions

View File

@@ -1,3 +1,17 @@
2016-05-14 0.12.11
- Fixes:
- tint2conf:
- Fixed crash in tint2conf when adding background
- Add correct extension to file name in tint2conf for 'Save as'
- Changed main window title in tint2conf
2016-05-07 0.12.10
- Fixes:
- Fixed crash in systray with non-Latin languagess (thanks zcodes)
- Invalidate cached pixmaps on resize/move (issue #576)
- Battery: do not show negative durations when the sensors return garbage
- Proper workaround for issue #555
2016-04-02 0.12.9 2016-04-02 0.12.9
- Fixes: - Fixes:
- Regression: Do not detect empty areas as clickable (issue #572) - Regression: Do not detect empty areas as clickable (issue #572)

View File

@@ -1,5 +1,5 @@
# New stable release: 0.12.9 # Latest stable release: 0.12.11
Changes: https://gitlab.com/o9000/tint2/blob/0.12.9/ChangeLog Changes: https://gitlab.com/o9000/tint2/blob/0.12.11/ChangeLog
Documentation: https://gitlab.com/o9000/tint2/wikis/Configure Documentation: https://gitlab.com/o9000/tint2/wikis/Configure
@@ -7,7 +7,7 @@ Compile it with (see also [dependencies](https://gitlab.com/o9000/tint2/wikis/In
``` ```
git clone https://gitlab.com/o9000/tint2.git git clone https://gitlab.com/o9000/tint2.git
cd tint2 cd tint2
git checkout 0.12.9 git checkout 0.12.11
mkdir build mkdir build
cd build cd build
cmake .. cmake ..
@@ -69,10 +69,10 @@ tint2 is a simple panel/taskbar made for modern X window managers. It was specif
# Screenshots # Screenshots
## Default config of the latest release: ## Default config:
![Screenshot_2016-01-23_14-42-57](https://gitlab.com/o9000/tint2/uploads/948fa74eca60864352a033580350b4c3/Screenshot_2016-01-23_14-42-57.png) ![Screenshot_2016-01-23_14-42-57](https://gitlab.com/o9000/tint2/uploads/948fa74eca60864352a033580350b4c3/Screenshot_2016-01-23_14-42-57.png)
## Various configurations: ## Various configs:
![screenshot](https://gitlab.com/o9000/tint2/wikis/screenshot.png) ![screenshot](https://gitlab.com/o9000/tint2/wikis/screenshot.png)

View File

@@ -437,6 +437,7 @@ int battery_os_update(BatteryState *state)
seconds = 3600 * (total_energy_full - total_energy_now) / total_power_now; seconds = 3600 * (total_energy_full - total_energy_now) / total_power_now;
else if (state->state == BATTERY_DISCHARGING) else if (state->state == BATTERY_DISCHARGING)
seconds = 3600 * total_energy_now / total_power_now; seconds = 3600 * total_energy_now / total_power_now;
seconds = MAX(0, seconds);
} }
battery_state_set_time(state, seconds); battery_state_set_time(state, seconds);

View File

@@ -603,6 +603,21 @@ void place_panel_all_desktops(Panel *p)
num_atoms); num_atoms);
} }
void replace_panel_all_desktops(Panel *p)
{
XClientMessageEvent m;
memset(&m, 0, sizeof(m));
m.type = ClientMessage;
m.send_event = True;
m.display = server.display;
m.window = p->main_win;
m.message_type = server.atom._NET_WM_DESKTOP;
m.format = 32;
m.data.l[0] = ALL_DESKTOPS;
XSendEvent(server.display, server.root_win, False, SubstructureRedirectMask | SubstructureNotifyMask, (XEvent *)&m);
XSync(server.display, False);
}
void set_panel_properties(Panel *p) void set_panel_properties(Panel *p)
{ {
XStoreName(server.display, p->main_win, panel_window_name); XStoreName(server.display, p->main_win, panel_window_name);

View File

@@ -155,6 +155,7 @@ void render_panel(Panel *panel);
void set_panel_items_order(Panel *p); void set_panel_items_order(Panel *p);
void place_panel_all_desktops(Panel *p); void place_panel_all_desktops(Panel *p);
void replace_panel_all_desktops(Panel *p);
void set_panel_properties(Panel *p); void set_panel_properties(Panel *p);
// draw background panel // draw background panel

View File

@@ -33,6 +33,7 @@
#include "systraybar.h" #include "systraybar.h"
#include "server.h" #include "server.h"
#include "panel.h" #include "panel.h"
#include "window.h"
GSList *icons; GSList *icons;
@@ -534,15 +535,7 @@ gboolean add_icon(Window win)
XSelectInput(server.display, win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask); XSelectInput(server.display, win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask);
XTextProperty xname; char *name = get_window_name(win);
char *name;
if (XGetWMName(server.display, win, &xname)) {
name = strdup((char *)xname.value);
XFree(xname.value);
} else {
name = strdup("");
}
if (systray_profile) if (systray_profile)
fprintf(stderr, "[%f] %s:%d win = %lu (%s)\n", profiling_get_time(), __FUNCTION__, __LINE__, win, name); fprintf(stderr, "[%f] %s:%d win = %lu (%s)\n", profiling_get_time(), __FUNCTION__, __LINE__, win, name);
Panel *panel = systray.area.panel; Panel *panel = systray.area.panel;
@@ -1068,15 +1061,7 @@ void systray_property_notify(TrayWindow *traywin, XEvent *e)
Atom at = e->xproperty.atom; Atom at = e->xproperty.atom;
if (at == server.atom.WM_NAME) { if (at == server.atom.WM_NAME) {
free(traywin->name); free(traywin->name);
traywin->name = get_window_name(traywin->win);
XTextProperty xname;
if (XGetWMName(server.display, traywin->win, &xname)) {
traywin->name = strdup((char *)xname.value);
XFree(xname.value);
} else {
traywin->name = strdup("");
}
if (systray.sort == SYSTRAY_SORT_ASCENDING || systray.sort == SYSTRAY_SORT_DESCENDING) { if (systray.sort == SYSTRAY_SORT_ASCENDING || systray.sort == SYSTRAY_SORT_DESCENDING) {
systray.list_icons = g_slist_sort(systray.list_icons, compare_traywindows); systray.list_icons = g_slist_sort(systray.list_icons, compare_traywindows);
// print_icons(); // print_icons();

View File

@@ -985,7 +985,7 @@ void event_property_notify(XEvent *e)
Panel *p = &panels[i]; Panel *p = &panels[i];
if (win == p->main_win) { if (win == p->main_win) {
if (at == server.atom._NET_WM_DESKTOP && get_window_desktop(p->main_win) != ALL_DESKTOPS) if (at == server.atom._NET_WM_DESKTOP && get_window_desktop(p->main_win) != ALL_DESKTOPS)
place_panel_all_desktops(p); replace_panel_all_desktops(p);
return; return;
} }
} }

View File

@@ -237,7 +237,7 @@ int main(int argc, char **argv)
// define main layout : container, menubar, toolbar // define main layout : container, menubar, toolbar
g_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(g_window), _("Panel theming")); gtk_window_set_title(GTK_WINDOW(g_window), _("Tint2 panel themes"));
gtk_window_resize(GTK_WINDOW(g_window), 920, 600); gtk_window_resize(GTK_WINDOW(g_window), 920, 600);
g_signal_connect(G_OBJECT(g_window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(g_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
vBox = gtk_vbox_new(FALSE, 0); vBox = gtk_vbox_new(FALSE, 0);
@@ -418,13 +418,38 @@ static void menuSaveAs()
GTK_RESPONSE_ACCEPT, GTK_RESPONSE_ACCEPT,
NULL); NULL);
GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog);
gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE); gtk_file_chooser_set_do_overwrite_confirmation(chooser, FALSE);
gchar *config_dir = g_build_filename(g_get_home_dir(), ".config", "tint2", NULL); gchar *config_dir = g_build_filename(g_get_home_dir(), ".config", "tint2", NULL);
gtk_file_chooser_set_current_folder(chooser, config_dir); gtk_file_chooser_set_current_folder(chooser, config_dir);
g_free(config_dir); g_free(config_dir);
GtkFileFilter *filter = gtk_file_filter_new();
gtk_file_filter_add_pattern(filter, "*.tint2rc");
gtk_file_filter_add_pattern(filter, "tint2rc");
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);
gtk_file_chooser_set_current_name(chooser, filename); gtk_file_chooser_set_current_name(chooser, filename);
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
gchar *newpath = gtk_file_chooser_get_filename(chooser); gchar *newpath = gtk_file_chooser_get_filename(chooser);
if (!endswith(newpath, ".tint2rc") && !endswith(newpath, "/tint2rc")) {
gchar *proper_path = g_strdup_printf("%s.tint2rc", newpath);
g_free(newpath);
newpath = proper_path;
}
if (g_file_test(newpath, G_FILE_TEST_EXISTS)) {
GtkWidget *w = gtk_message_dialog_new(GTK_WINDOW(g_window),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_YES_NO,
_("A file named \"%s\" already exists. Do you want to replace it?"),
newpath);
gint response = gtk_dialog_run(GTK_DIALOG(w));
gtk_widget_destroy(w);
if (response != GTK_RESPONSE_YES) {
g_free(newpath);
gtk_widget_destroy(dialog);
g_free(filepath);
return;
}
}
import_with_overwrite(filepath, newpath); import_with_overwrite(filepath, newpath);
g_free(newpath); g_free(newpath);
} }

View File

@@ -2059,7 +2059,7 @@ msgid "tint2conf"
msgstr "tint2conf" msgstr "tint2conf"
#: ../main.c:240 #: ../main.c:240
msgid "Panel theming" msgid "Tint2 panel themes"
msgstr "Izgled ploče" msgstr "Izgled ploče"
#: ../main.c:250 #: ../main.c:250
@@ -2189,16 +2189,21 @@ msgstr "Uredi odabranu temu"
msgid "Save theme as" msgid "Save theme as"
msgstr "Snimiti temu kao" msgstr "Snimiti temu kao"
#: ../main.c:446 #: ../main.c:439
#, c-format
msgid "A file named \"%s\" already exists. Do you want to replace it?"
msgstr ""
#: ../main.c:472
#, fuzzy #, fuzzy
msgid "Do you really want to delete the selected theme?" msgid "Do you really want to delete the selected theme?"
msgstr "Uredi odabranu temu" msgstr "Uredi odabranu temu"
#: ../main.c:485 #: ../main.c:511
msgid "Do you really want to reset the selected theme to default?" msgid "Do you really want to reset the selected theme to default?"
msgstr "" msgstr ""
#: ../main.c:653 #: ../main.c:679
msgid "Do you really want to replace the default theme with the selected " msgid "Do you really want to replace the default theme with the selected "
"theme?" "theme?"
msgstr "" msgstr ""

View File

@@ -2117,8 +2117,8 @@ msgid "tint2conf"
msgstr "tint2conf" msgstr "tint2conf"
#: ../main.c:240 #: ../main.c:240
msgid "Panel theming" msgid "Tint2 panel themes"
msgstr "Thème du panel" msgstr "Thème du panel tint2"
#: ../main.c:250 #: ../main.c:250
msgid "Theme" msgid "Theme"
@@ -2240,15 +2240,21 @@ msgstr "Veuillez sélectionner un thème."
msgid "Save theme as" msgid "Save theme as"
msgstr "Enregistrer le thème sous" msgstr "Enregistrer le thème sous"
#: ../main.c:446 #: ../main.c:439
#, c-format
msgid "A file named \"%s\" already exists. Do you want to replace it?"
msgstr "Un fichier nommé « %s » existe déjà. Voulez-vous le remplacer ?"
#: ../main.c:472
msgid "Do you really want to delete the selected theme?" msgid "Do you really want to delete the selected theme?"
msgstr "Voulez-vous vraiment supprimer le thème choisi?" msgstr "Voulez-vous vraiment supprimer le thème choisi?"
#: ../main.c:485 #: ../main.c:511
msgid "Do you really want to reset the selected theme to default?" msgid "Do you really want to reset the selected theme to default?"
msgstr "Voulez-vous vraiment revenir au thème par défaut?" msgstr "Voulez-vous vraiment revenir au thème par défaut?"
#: ../main.c:653 #: ../main.c:679
msgid "Do you really want to replace the default theme with the selected " msgid "Do you really want to replace the default theme with the selected "
"theme?" "theme?"
msgstr "Voulez-vous vraiment remplacer le thème par défaut par celui sélectionné?" msgstr "Voulez-vous vraiment remplacer le thème par défaut par celui "
"sélectionné?"

View File

@@ -2059,7 +2059,7 @@ msgid "tint2conf"
msgstr "tint2conf" msgstr "tint2conf"
#: ../main.c:240 #: ../main.c:240
msgid "Panel theming" msgid "Tint2 panel themes"
msgstr "Izgled ploče" msgstr "Izgled ploče"
#: ../main.c:250 #: ../main.c:250
@@ -2189,16 +2189,21 @@ msgstr "Uredi odabranu temu"
msgid "Save theme as" msgid "Save theme as"
msgstr "Snimiti temu kao" msgstr "Snimiti temu kao"
#: ../main.c:446 #: ../main.c:439
#, c-format
msgid "A file named \"%s\" already exists. Do you want to replace it?"
msgstr "Datoteka imena \"%s\" već postoji. Želite li ju zamjeniti?"
#: ../main.c:472
#, fuzzy #, fuzzy
msgid "Do you really want to delete the selected theme?" msgid "Do you really want to delete the selected theme?"
msgstr "Uredi odabranu temu" msgstr "Uredi odabranu temu"
#: ../main.c:485 #: ../main.c:511
msgid "Do you really want to reset the selected theme to default?" msgid "Do you really want to reset the selected theme to default?"
msgstr "" msgstr ""
#: ../main.c:653 #: ../main.c:679
msgid "Do you really want to replace the default theme with the selected " msgid "Do you really want to replace the default theme with the selected "
"theme?" "theme?"
msgstr "" msgstr ""

View File

@@ -2093,7 +2093,7 @@ msgid "tint2conf"
msgstr "tint2conf" msgstr "tint2conf"
#: ../main.c:240 #: ../main.c:240
msgid "Panel theming" msgid "Tint2 panel themes"
msgstr "Wygląd panelu" msgstr "Wygląd panelu"
#: ../main.c:250 #: ../main.c:250
@@ -2223,16 +2223,21 @@ msgstr "Edycja wybranego motywu"
msgid "Save theme as" msgid "Save theme as"
msgstr "Zapisz motyw jako" msgstr "Zapisz motyw jako"
#: ../main.c:446 #: ../main.c:439
#, c-format
msgid "A file named \"%s\" already exists. Do you want to replace it?"
msgstr "Plik o nazwie \"%s\" już istnieje. Zastąpić go?"
#: ../main.c:472
#, fuzzy #, fuzzy
msgid "Do you really want to delete the selected theme?" msgid "Do you really want to delete the selected theme?"
msgstr "Edycja wybranego motywu" msgstr "Edycja wybranego motywu"
#: ../main.c:485 #: ../main.c:511
msgid "Do you really want to reset the selected theme to default?" msgid "Do you really want to reset the selected theme to default?"
msgstr "" msgstr ""
#: ../main.c:653 #: ../main.c:679
msgid "Do you really want to replace the default theme with the selected " msgid "Do you really want to replace the default theme with the selected "
"theme?" "theme?"
msgstr "" msgstr ""

File diff suppressed because it is too large Load Diff

View File

@@ -2058,7 +2058,7 @@ msgid "tint2conf"
msgstr "тинт2конф" msgstr "тинт2конф"
#: ../main.c:240 #: ../main.c:240
msgid "Panel theming" msgid "Tint2 panel themes"
msgstr "Изглед плоче" msgstr "Изглед плоче"
#: ../main.c:250 #: ../main.c:250
@@ -2188,16 +2188,21 @@ msgstr "Уреди одабрану тему"
msgid "Save theme as" msgid "Save theme as"
msgstr "Снимити тему као" msgstr "Снимити тему као"
#: ../main.c:446 #: ../main.c:439
#, c-format
msgid "A file named \"%s\" already exists. Do you want to replace it?"
msgstr "Датотека под називом „%s“ већ постоји. Да ли желите да је замените?"
#: ../main.c:472
#, fuzzy #, fuzzy
msgid "Do you really want to delete the selected theme?" msgid "Do you really want to delete the selected theme?"
msgstr "Уреди одабрану тему" msgstr "Уреди одабрану тему"
#: ../main.c:485 #: ../main.c:511
msgid "Do you really want to reset the selected theme to default?" msgid "Do you really want to reset the selected theme to default?"
msgstr "" msgstr ""
#: ../main.c:653 #: ../main.c:679
msgid "Do you really want to replace the default theme with the selected " msgid "Do you really want to replace the default theme with the selected "
"theme?" "theme?"
msgstr "" msgstr ""

View File

@@ -1914,7 +1914,7 @@ msgid "tint2conf"
msgstr "" msgstr ""
#: ../main.c:240 #: ../main.c:240
msgid "Panel theming" msgid "Tint2 panel themes"
msgstr "" msgstr ""
#: ../main.c:250 #: ../main.c:250
@@ -2036,15 +2036,20 @@ msgstr ""
msgid "Save theme as" msgid "Save theme as"
msgstr "" msgstr ""
#: ../main.c:446 #: ../main.c:439
#, c-format
msgid "A file named \"%s\" already exists. Do you want to replace it?"
msgstr ""
#: ../main.c:472
msgid "Do you really want to delete the selected theme?" msgid "Do you really want to delete the selected theme?"
msgstr "" msgstr ""
#: ../main.c:485 #: ../main.c:511
msgid "Do you really want to reset the selected theme to default?" msgid "Do you really want to reset the selected theme to default?"
msgstr "" msgstr ""
#: ../main.c:653 #: ../main.c:679
msgid "" msgid ""
"Do you really want to replace the default theme with the selected theme?" "Do you really want to replace the default theme with the selected theme?"
msgstr "" msgstr ""

View File

@@ -735,6 +735,7 @@ void background_create_new()
bgColBorderOpacity, borderOpacity, bgColBorderOpacity, borderOpacity,
bgColBorderWidth, b, bgColBorderWidth, b,
bgColCornerRadius, r, bgColCornerRadius, r,
bgColText, "",
bgColFillColorOver, &fillColorOver, bgColFillColorOver, &fillColorOver,
bgColFillOpacityOver, fillOpacityOver, bgColFillOpacityOver, fillOpacityOver,
bgColBorderColorOver, &borderColorOver, bgColBorderColorOver, &borderColorOver,
@@ -743,7 +744,6 @@ void background_create_new()
bgColFillOpacityPress, fillOpacityPress, bgColFillOpacityPress, fillOpacityPress,
bgColBorderColorPress, &borderColorPress, bgColBorderColorPress, &borderColorPress,
bgColBorderOpacityPress, borderOpacityPress, bgColBorderOpacityPress, borderOpacityPress,
bgColText, "",
-1); -1);
background_update_image(index); background_update_image(index);
@@ -805,6 +805,7 @@ void background_duplicate(GtkWidget *widget, gpointer data)
bgColFillOpacity, fillOpacity, bgColFillOpacity, fillOpacity,
bgColBorderColor, borderColor, bgColBorderColor, borderColor,
bgColBorderOpacity, borderOpacity, bgColBorderOpacity, borderOpacity,
bgColText, "",
bgColFillColorOver, fillColorOver, bgColFillColorOver, fillColorOver,
bgColFillOpacityOver, fillOpacityOver, bgColFillOpacityOver, fillOpacityOver,
bgColBorderColorOver, borderColorOver, bgColBorderColorOver, borderColorOver,
@@ -815,7 +816,6 @@ void background_duplicate(GtkWidget *widget, gpointer data)
bgColBorderOpacityPress, borderOpacityPress, bgColBorderOpacityPress, borderOpacityPress,
bgColBorderWidth, b, bgColBorderWidth, b,
bgColCornerRadius, r, bgColCornerRadius, r,
bgColText, ""
-1); -1);
g_boxed_free(GDK_TYPE_COLOR, fillColor); g_boxed_free(GDK_TYPE_COLOR, fillColor);
g_boxed_free(GDK_TYPE_COLOR, borderColor); g_boxed_free(GDK_TYPE_COLOR, borderColor);
@@ -2080,9 +2080,9 @@ void launcher_add_app(GtkWidget *widget, gpointer data)
gtk_list_store_append(launcher_apps, &iter); gtk_list_store_append(launcher_apps, &iter);
gtk_list_store_set(launcher_apps, &iter, gtk_list_store_set(launcher_apps, &iter,
appsColIcon, pixbuf, appsColIcon, pixbuf,
appsColIconName, g_strdup(iconName),
appsColText, g_strdup(name), appsColText, g_strdup(name),
appsColPath, g_strdup(path), appsColPath, g_strdup(path),
appsColIconName, g_strdup(iconName),
-1); -1);
if (pixbuf) if (pixbuf)
g_object_unref(pixbuf); g_object_unref(pixbuf);
@@ -2324,9 +2324,9 @@ void load_desktop_file(const char *file, gboolean selected)
gtk_list_store_insert(store, &iter, index); gtk_list_store_insert(store, &iter, index);
gtk_list_store_set(store, &iter, gtk_list_store_set(store, &iter,
appsColIcon, pixbuf, appsColIcon, pixbuf,
appsColIconName, g_strdup(entry.icon),
appsColText, g_strdup(entry.name), appsColText, g_strdup(entry.name),
appsColPath, g_strdup(file), appsColPath, g_strdup(file),
appsColIconName, g_strdup(entry.icon),
-1); -1);
if (pixbuf) if (pixbuf)
g_object_unref(pixbuf); g_object_unref(pixbuf);
@@ -2337,9 +2337,9 @@ void load_desktop_file(const char *file, gboolean selected)
gtk_list_store_append(store, &iter); gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, gtk_list_store_set(store, &iter,
appsColIcon, pixbuf, appsColIcon, pixbuf,
appsColIconName, g_strdup(""),
appsColText, g_strdup(file), appsColText, g_strdup(file),
appsColPath, g_strdup(file), appsColPath, g_strdup(file),
appsColIconName, g_strdup(""),
-1); -1);
if (pixbuf) if (pixbuf)
g_object_unref(pixbuf); g_object_unref(pixbuf);
@@ -2359,9 +2359,9 @@ void populate_from_entries(GList *entries, gboolean selected)
gtk_list_store_append(selected ? launcher_apps : all_apps, &iter); gtk_list_store_append(selected ? launcher_apps : all_apps, &iter);
gtk_list_store_set(selected ? launcher_apps :all_apps, &iter, gtk_list_store_set(selected ? launcher_apps :all_apps, &iter,
appsColIcon, pixbuf, appsColIcon, pixbuf,
appsColIconName, g_strdup(entry->icon),
appsColText, g_strdup(entry->name), appsColText, g_strdup(entry->name),
appsColPath, g_strdup(entry->path), appsColPath, g_strdup(entry->path),
appsColIconName, g_strdup(entry->icon),
-1); -1);
if (pixbuf) if (pixbuf)
g_object_unref(pixbuf); g_object_unref(pixbuf);

View File

@@ -70,17 +70,15 @@ void relayout_fixed(Area *a)
relayout_fixed(l->data); relayout_fixed(l->data);
// Recalculate size // Recalculate size
a->_changed = 0; a->_changed = FALSE;
if (a->resize_needed && a->size_mode == LAYOUT_FIXED) { if (a->resize_needed && a->size_mode == LAYOUT_FIXED) {
a->resize_needed = 0; a->resize_needed = FALSE;
if (a->_resize) { if (a->_resize && a->_resize(a)) {
if (a->_resize(a)) { // The size has changed => resize needed for the parent
// The size hash changed => resize needed for the parent if (a->parent)
if (a->parent) ((Area *)a->parent)->resize_needed = TRUE;
((Area *)a->parent)->resize_needed = 1; a->_changed = TRUE;
a->_changed = 1;
}
} }
} }
} }
@@ -92,10 +90,11 @@ void relayout_dynamic(Area *a, int level)
// Area is resized before its children // Area is resized before its children
if (a->resize_needed && a->size_mode == LAYOUT_DYNAMIC) { if (a->resize_needed && a->size_mode == LAYOUT_DYNAMIC) {
a->resize_needed = 0; a->resize_needed = FALSE;
if (a->_resize) { if (a->_resize) {
a->_resize(a); if (a->_resize(a))
a->_changed = TRUE;
// resize children with LAYOUT_DYNAMIC // resize children with LAYOUT_DYNAMIC
for (GList *l = a->children; l; l = l->next) { for (GList *l = a->children; l; l = l->next) {
Area *child = ((Area *)l->data); Area *child = ((Area *)l->data);
@@ -119,13 +118,13 @@ void relayout_dynamic(Area *a, int level)
if (pos != child->posx) { if (pos != child->posx) {
// pos changed => redraw // pos changed => redraw
child->posx = pos; child->posx = pos;
child->_changed = 1; child->_changed = TRUE;
} }
} else { } else {
if (pos != child->posy) { if (pos != child->posy) {
// pos changed => redraw // pos changed => redraw
child->posy = pos; child->posy = pos;
child->_changed = 1; child->_changed = TRUE;
} }
} }
@@ -148,13 +147,13 @@ void relayout_dynamic(Area *a, int level)
if (pos != child->posx) { if (pos != child->posx) {
// pos changed => redraw // pos changed => redraw
child->posx = pos; child->posx = pos;
child->_changed = 1; child->_changed = TRUE;
} }
} else { } else {
if (pos != child->posy) { if (pos != child->posy) {
// pos changed => redraw // pos changed => redraw
child->posy = pos; child->posy = pos;
child->_changed = 1; child->_changed = TRUE;
} }
} }
@@ -187,13 +186,13 @@ void relayout_dynamic(Area *a, int level)
if (pos != child->posx) { if (pos != child->posx) {
// pos changed => redraw // pos changed => redraw
child->posx = pos; child->posx = pos;
child->_changed = 1; child->_changed = TRUE;
} }
} else { } else {
if (pos != child->posy) { if (pos != child->posy) {
// pos changed => redraw // pos changed => redraw
child->posy = pos; child->posy = pos;
child->_changed = 1; child->_changed = TRUE;
} }
} }
@@ -224,7 +223,7 @@ void draw_tree(Area *a)
return; return;
if (a->_redraw_needed) { if (a->_redraw_needed) {
a->_redraw_needed = 0; a->_redraw_needed = FALSE;
draw(a); draw(a);
} }
@@ -286,7 +285,7 @@ int relayout_with_constraint(Area *a, int maximum_size)
modulo--; modulo--;
} }
if (child->width != old_width) if (child->width != old_width)
child->_changed = 1; child->_changed = TRUE;
} }
} }
} else { } else {
@@ -326,7 +325,7 @@ int relayout_with_constraint(Area *a, int maximum_size)
modulo--; modulo--;
} }
if (child->height != old_height) if (child->height != old_height)
child->_changed = 1; child->_changed = TRUE;
} }
} }
} }
@@ -361,7 +360,7 @@ void hide(Area *a)
a->on_screen = FALSE; a->on_screen = FALSE;
if (parent) if (parent)
parent->resize_needed = 1; parent->resize_needed = TRUE;
if (panel_horizontal) if (panel_horizontal)
a->width = 0; a->width = 0;
else else
@@ -374,12 +373,27 @@ void show(Area *a)
a->on_screen = TRUE; a->on_screen = TRUE;
if (parent) if (parent)
parent->resize_needed = 1; parent->resize_needed = TRUE;
a->resize_needed = 1; a->resize_needed = TRUE;
} }
void draw(Area *a) void draw(Area *a)
{ {
if (a->_changed) {
// On resize/move, invalidate cached pixmaps
for (int i = 0; i < MOUSE_STATE_COUNT; i++) {
XFreePixmap(server.display, a->pix_by_state[i]);
if (a->pix == a->pix_by_state[i]) {
a->pix = None;
}
a->pix_by_state[i] = None;
}
if (a->pix) {
XFreePixmap(server.display, a->pix);
a->pix = None;
}
}
if (a->pix) { if (a->pix) {
XFreePixmap(server.display, a->pix); XFreePixmap(server.display, a->pix);
if (a->pix_by_state[a->has_mouse_over_effect ? a->mouse_state : 0] != a->pix) if (a->pix_by_state[a->has_mouse_over_effect ? a->mouse_state : 0] != a->pix)

View File

@@ -320,3 +320,32 @@ gulong *get_best_icon(gulong *data, int icon_count, int num, int *iw, int *ih, i
*ih = height[icon_num]; *ih = height[icon_num];
return icon_data[icon_num]; return icon_data[icon_num];
} }
// Thanks zcodes!
char *get_window_name(Window win)
{
XTextProperty text_property;
Status status = XGetWMName(server.display, win, &text_property);
if (!status || !text_property.value || !text_property.nitems) {
return strdup("");
}
char **name_list;
int count;
status = Xutf8TextPropertyToTextList(server.display, &text_property, &name_list, &count);
if (status < Success || !count) {
XFree(text_property.value);
return strdup("");
}
if (!name_list[0]) {
XFreeStringList(name_list);
XFree(text_property.value);
return strdup("");
}
char *result = strdup(name_list[0]);
XFreeStringList(name_list);
XFree(text_property.value);
return result;
}

View File

@@ -33,4 +33,6 @@ void change_window_desktop(Window win, int desktop);
int get_icon_count(gulong *data, int num); int get_icon_count(gulong *data, int num);
gulong *get_best_icon(gulong *data, int icon_count, int num, int *iw, int *ih, int best_icon_size); gulong *get_best_icon(gulong *data, int icon_count, int num, int *iw, int *ih, int best_icon_size);
char *get_window_name(Window win);
#endif #endif

View File

@@ -1,4 +1,4 @@
#---- Generated by tint2conf bd50 ---- #---- Generated by tint2conf 2e3c ----
# See https://gitlab.com/o9000/tint2/wikis/Configure for # See https://gitlab.com/o9000/tint2/wikis/Configure for
# full documentation of the configuration options. # full documentation of the configuration options.
#------------------------------------- #-------------------------------------
@@ -67,11 +67,11 @@ border_color_pressed = #555555 100
rounded = 2 rounded = 2
border_width = 1 border_width = 1
background_color = #222222 100 background_color = #222222 100
border_color = #777777 100 border_color = #777777 30
background_color_hover = #222222 100 background_color_hover = #222222 100
border_color_hover = #777777 100 border_color_hover = #777777 30
background_color_pressed = #222222 100 background_color_pressed = #222222 100
border_color_pressed = #777777 100 border_color_pressed = #777777 30
#------------------------------------- #-------------------------------------
# Panel # Panel
@@ -85,6 +85,7 @@ panel_dock = 0
panel_position = bottom center horizontal panel_position = bottom center horizontal
panel_layer = normal panel_layer = normal
panel_monitor = all panel_monitor = all
primary_monitor_first = 0
autohide = 0 autohide = 0
autohide_show_timeout = 0 autohide_show_timeout = 0
autohide_hide_timeout = 0.5 autohide_hide_timeout = 0.5
@@ -106,6 +107,7 @@ taskbar_active_background_id = 0
taskbar_name = 1 taskbar_name = 1
taskbar_hide_inactive_tasks = 0 taskbar_hide_inactive_tasks = 0
taskbar_hide_different_monitor = 0 taskbar_hide_different_monitor = 0
taskbar_always_show_all_desktop_tasks = 0
taskbar_name_padding = 6 3 taskbar_name_padding = 6 3
taskbar_name_background_id = 6 taskbar_name_background_id = 6
taskbar_name_active_background_id = 7 taskbar_name_active_background_id = 7

View File

@@ -1,4 +1,4 @@
#---- Generated by tint2conf 5b63 ---- #---- Generated by tint2conf 2c73 ----
# See https://gitlab.com/o9000/tint2/wikis/Configure for # See https://gitlab.com/o9000/tint2/wikis/Configure for
# full documentation of the configuration options. # full documentation of the configuration options.
#------------------------------------- #-------------------------------------
@@ -57,11 +57,11 @@ border_color_pressed = #999999 100
rounded = 2 rounded = 2
border_width = 1 border_width = 1
background_color = #eeeeee 4 background_color = #eeeeee 4
border_color = #cccccc 100 border_color = #cccccc 30
background_color_hover = #eeeeee 22 background_color_hover = #eeeeee 22
border_color_hover = #999999 100 border_color_hover = #999999 30
background_color_pressed = #dddddd 4 background_color_pressed = #dddddd 4
border_color_pressed = #999999 100 border_color_pressed = #999999 30
# Background 7: Active desktop name # Background 7: Active desktop name
rounded = 2 rounded = 2
@@ -85,6 +85,7 @@ panel_dock = 0
panel_position = bottom center horizontal panel_position = bottom center horizontal
panel_layer = normal panel_layer = normal
panel_monitor = all panel_monitor = all
primary_monitor_first = 0
autohide = 0 autohide = 0
autohide_show_timeout = 0 autohide_show_timeout = 0
autohide_hide_timeout = 0.5 autohide_hide_timeout = 0.5
@@ -106,6 +107,7 @@ taskbar_active_background_id = 0
taskbar_name = 1 taskbar_name = 1
taskbar_hide_inactive_tasks = 0 taskbar_hide_inactive_tasks = 0
taskbar_hide_different_monitor = 0 taskbar_hide_different_monitor = 0
taskbar_always_show_all_desktop_tasks = 0
taskbar_name_padding = 6 3 taskbar_name_padding = 6 3
taskbar_name_background_id = 6 taskbar_name_background_id = 6
taskbar_name_active_background_id = 7 taskbar_name_active_background_id = 7

View File

@@ -1,4 +1,4 @@
#---- Generated by tint2conf 812e ---- #---- Generated by tint2conf ac71 ----
# See https://gitlab.com/o9000/tint2/wikis/Configure for # See https://gitlab.com/o9000/tint2/wikis/Configure for
# full documentation of the configuration options. # full documentation of the configuration options.
#------------------------------------- #-------------------------------------
@@ -57,11 +57,11 @@ border_color_pressed = #999999 100
rounded = 2 rounded = 2
border_width = 1 border_width = 1
background_color = #eeeeee 4 background_color = #eeeeee 4
border_color = #999999 100 border_color = #999999 30
background_color_hover = #eeeeee 22 background_color_hover = #eeeeee 22
border_color_hover = #999999 100 border_color_hover = #999999 30
background_color_pressed = #dddddd 4 background_color_pressed = #dddddd 4
border_color_pressed = #999999 100 border_color_pressed = #999999 30
# Background 7: Active desktop name # Background 7: Active desktop name
rounded = 2 rounded = 2
@@ -85,6 +85,7 @@ panel_dock = 0
panel_position = bottom left vertical panel_position = bottom left vertical
panel_layer = normal panel_layer = normal
panel_monitor = all panel_monitor = all
primary_monitor_first = 0
autohide = 0 autohide = 0
autohide_show_timeout = 0 autohide_show_timeout = 0
autohide_hide_timeout = 0.5 autohide_hide_timeout = 0.5
@@ -106,6 +107,7 @@ taskbar_active_background_id = 0
taskbar_name = 1 taskbar_name = 1
taskbar_hide_inactive_tasks = 0 taskbar_hide_inactive_tasks = 0
taskbar_hide_different_monitor = 0 taskbar_hide_different_monitor = 0
taskbar_always_show_all_desktop_tasks = 0
taskbar_name_padding = 6 3 taskbar_name_padding = 6 3
taskbar_name_background_id = 6 taskbar_name_background_id = 6
taskbar_name_active_background_id = 7 taskbar_name_active_background_id = 7