Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a5d8fd978 | ||
|
|
e09c4a0642 | ||
|
|
c1eb404095 | ||
|
|
7b3769da2a | ||
|
|
cc49e4026e | ||
|
|
385f4fd25b | ||
|
|
6c00321262 | ||
|
|
aa77f05a98 | ||
|
|
ccd590e397 | ||
|
|
4ee1e8f2fa | ||
|
|
690f30308f | ||
|
|
fea91746a4 | ||
|
|
9d8350dabc | ||
|
|
a6879ea2a5 |
14
ChangeLog
14
ChangeLog
@@ -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
|
||||
- Fixes:
|
||||
- Regression: Do not detect empty areas as clickable (issue #572)
|
||||
|
||||
10
README.md
10
README.md
@@ -1,5 +1,5 @@
|
||||
# New stable release: 0.12.9
|
||||
Changes: https://gitlab.com/o9000/tint2/blob/0.12.9/ChangeLog
|
||||
# Latest stable release: 0.12.11
|
||||
Changes: https://gitlab.com/o9000/tint2/blob/0.12.11/ChangeLog
|
||||
|
||||
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
|
||||
cd tint2
|
||||
git checkout 0.12.9
|
||||
git checkout 0.12.11
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
@@ -69,10 +69,10 @@ tint2 is a simple panel/taskbar made for modern X window managers. It was specif
|
||||
|
||||
# Screenshots
|
||||
|
||||
## Default config of the latest release:
|
||||
## Default config:
|
||||
|
||||

|
||||
|
||||
## Various configurations:
|
||||
## Various configs:
|
||||
|
||||

|
||||
|
||||
@@ -437,6 +437,7 @@ int battery_os_update(BatteryState *state)
|
||||
seconds = 3600 * (total_energy_full - total_energy_now) / total_power_now;
|
||||
else if (state->state == BATTERY_DISCHARGING)
|
||||
seconds = 3600 * total_energy_now / total_power_now;
|
||||
seconds = MAX(0, seconds);
|
||||
}
|
||||
battery_state_set_time(state, seconds);
|
||||
|
||||
|
||||
15
src/panel.c
15
src/panel.c
@@ -603,6 +603,21 @@ void place_panel_all_desktops(Panel *p)
|
||||
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)
|
||||
{
|
||||
XStoreName(server.display, p->main_win, panel_window_name);
|
||||
|
||||
@@ -155,6 +155,7 @@ void render_panel(Panel *panel);
|
||||
|
||||
void set_panel_items_order(Panel *p);
|
||||
void place_panel_all_desktops(Panel *p);
|
||||
void replace_panel_all_desktops(Panel *p);
|
||||
void set_panel_properties(Panel *p);
|
||||
|
||||
// draw background panel
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "systraybar.h"
|
||||
#include "server.h"
|
||||
#include "panel.h"
|
||||
#include "window.h"
|
||||
|
||||
GSList *icons;
|
||||
|
||||
@@ -534,15 +535,7 @@ gboolean add_icon(Window win)
|
||||
|
||||
XSelectInput(server.display, win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask);
|
||||
|
||||
XTextProperty xname;
|
||||
char *name;
|
||||
if (XGetWMName(server.display, win, &xname)) {
|
||||
name = strdup((char *)xname.value);
|
||||
XFree(xname.value);
|
||||
} else {
|
||||
name = strdup("");
|
||||
}
|
||||
|
||||
char *name = get_window_name(win);
|
||||
if (systray_profile)
|
||||
fprintf(stderr, "[%f] %s:%d win = %lu (%s)\n", profiling_get_time(), __FUNCTION__, __LINE__, win, name);
|
||||
Panel *panel = systray.area.panel;
|
||||
@@ -1068,15 +1061,7 @@ void systray_property_notify(TrayWindow *traywin, XEvent *e)
|
||||
Atom at = e->xproperty.atom;
|
||||
if (at == server.atom.WM_NAME) {
|
||||
free(traywin->name);
|
||||
|
||||
XTextProperty xname;
|
||||
if (XGetWMName(server.display, traywin->win, &xname)) {
|
||||
traywin->name = strdup((char *)xname.value);
|
||||
XFree(xname.value);
|
||||
} else {
|
||||
traywin->name = strdup("");
|
||||
}
|
||||
|
||||
traywin->name = get_window_name(traywin->win);
|
||||
if (systray.sort == SYSTRAY_SORT_ASCENDING || systray.sort == SYSTRAY_SORT_DESCENDING) {
|
||||
systray.list_icons = g_slist_sort(systray.list_icons, compare_traywindows);
|
||||
// print_icons();
|
||||
|
||||
@@ -985,7 +985,7 @@ void event_property_notify(XEvent *e)
|
||||
Panel *p = &panels[i];
|
||||
if (win == p->main_win) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ int main(int argc, char **argv)
|
||||
|
||||
// define main layout : container, menubar, toolbar
|
||||
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);
|
||||
g_signal_connect(G_OBJECT(g_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
|
||||
vBox = gtk_vbox_new(FALSE, 0);
|
||||
@@ -418,13 +418,38 @@ static void menuSaveAs()
|
||||
GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
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);
|
||||
gtk_file_chooser_set_current_folder(chooser, 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);
|
||||
if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
|
||||
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);
|
||||
g_free(newpath);
|
||||
}
|
||||
|
||||
@@ -2059,7 +2059,7 @@ msgid "tint2conf"
|
||||
msgstr "tint2conf"
|
||||
|
||||
#: ../main.c:240
|
||||
msgid "Panel theming"
|
||||
msgid "Tint2 panel themes"
|
||||
msgstr "Izgled ploče"
|
||||
|
||||
#: ../main.c:250
|
||||
@@ -2189,16 +2189,21 @@ msgstr "Uredi odabranu temu"
|
||||
msgid "Save theme as"
|
||||
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
|
||||
msgid "Do you really want to delete the selected theme?"
|
||||
msgstr "Uredi odabranu temu"
|
||||
|
||||
#: ../main.c:485
|
||||
#: ../main.c:511
|
||||
msgid "Do you really want to reset the selected theme to default?"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:653
|
||||
#: ../main.c:679
|
||||
msgid "Do you really want to replace the default theme with the selected "
|
||||
"theme?"
|
||||
msgstr ""
|
||||
|
||||
@@ -2117,8 +2117,8 @@ msgid "tint2conf"
|
||||
msgstr "tint2conf"
|
||||
|
||||
#: ../main.c:240
|
||||
msgid "Panel theming"
|
||||
msgstr "Thème du panel"
|
||||
msgid "Tint2 panel themes"
|
||||
msgstr "Thème du panel tint2"
|
||||
|
||||
#: ../main.c:250
|
||||
msgid "Theme"
|
||||
@@ -2240,15 +2240,21 @@ msgstr "Veuillez sélectionner un thème."
|
||||
msgid "Save theme as"
|
||||
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?"
|
||||
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?"
|
||||
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 "
|
||||
"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é?"
|
||||
|
||||
@@ -2059,7 +2059,7 @@ msgid "tint2conf"
|
||||
msgstr "tint2conf"
|
||||
|
||||
#: ../main.c:240
|
||||
msgid "Panel theming"
|
||||
msgid "Tint2 panel themes"
|
||||
msgstr "Izgled ploče"
|
||||
|
||||
#: ../main.c:250
|
||||
@@ -2189,16 +2189,21 @@ msgstr "Uredi odabranu temu"
|
||||
msgid "Save theme as"
|
||||
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
|
||||
msgid "Do you really want to delete the selected theme?"
|
||||
msgstr "Uredi odabranu temu"
|
||||
|
||||
#: ../main.c:485
|
||||
#: ../main.c:511
|
||||
msgid "Do you really want to reset the selected theme to default?"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:653
|
||||
#: ../main.c:679
|
||||
msgid "Do you really want to replace the default theme with the selected "
|
||||
"theme?"
|
||||
msgstr ""
|
||||
|
||||
@@ -2093,7 +2093,7 @@ msgid "tint2conf"
|
||||
msgstr "tint2conf"
|
||||
|
||||
#: ../main.c:240
|
||||
msgid "Panel theming"
|
||||
msgid "Tint2 panel themes"
|
||||
msgstr "Wygląd panelu"
|
||||
|
||||
#: ../main.c:250
|
||||
@@ -2223,16 +2223,21 @@ msgstr "Edycja wybranego motywu"
|
||||
msgid "Save theme as"
|
||||
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
|
||||
msgid "Do you really want to delete the selected theme?"
|
||||
msgstr "Edycja wybranego motywu"
|
||||
|
||||
#: ../main.c:485
|
||||
#: ../main.c:511
|
||||
msgid "Do you really want to reset the selected theme to default?"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:653
|
||||
#: ../main.c:679
|
||||
msgid "Do you really want to replace the default theme with the selected "
|
||||
"theme?"
|
||||
msgstr ""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2058,7 +2058,7 @@ msgid "tint2conf"
|
||||
msgstr "тинт2конф"
|
||||
|
||||
#: ../main.c:240
|
||||
msgid "Panel theming"
|
||||
msgid "Tint2 panel themes"
|
||||
msgstr "Изглед плоче"
|
||||
|
||||
#: ../main.c:250
|
||||
@@ -2188,16 +2188,21 @@ msgstr "Уреди одабрану тему"
|
||||
msgid "Save theme as"
|
||||
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
|
||||
msgid "Do you really want to delete the selected theme?"
|
||||
msgstr "Уреди одабрану тему"
|
||||
|
||||
#: ../main.c:485
|
||||
#: ../main.c:511
|
||||
msgid "Do you really want to reset the selected theme to default?"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:653
|
||||
#: ../main.c:679
|
||||
msgid "Do you really want to replace the default theme with the selected "
|
||||
"theme?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1914,7 +1914,7 @@ msgid "tint2conf"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:240
|
||||
msgid "Panel theming"
|
||||
msgid "Tint2 panel themes"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:250
|
||||
@@ -2036,15 +2036,20 @@ msgstr ""
|
||||
msgid "Save theme as"
|
||||
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?"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:485
|
||||
#: ../main.c:511
|
||||
msgid "Do you really want to reset the selected theme to default?"
|
||||
msgstr ""
|
||||
|
||||
#: ../main.c:653
|
||||
#: ../main.c:679
|
||||
msgid ""
|
||||
"Do you really want to replace the default theme with the selected theme?"
|
||||
msgstr ""
|
||||
|
||||
@@ -735,6 +735,7 @@ void background_create_new()
|
||||
bgColBorderOpacity, borderOpacity,
|
||||
bgColBorderWidth, b,
|
||||
bgColCornerRadius, r,
|
||||
bgColText, "",
|
||||
bgColFillColorOver, &fillColorOver,
|
||||
bgColFillOpacityOver, fillOpacityOver,
|
||||
bgColBorderColorOver, &borderColorOver,
|
||||
@@ -743,7 +744,6 @@ void background_create_new()
|
||||
bgColFillOpacityPress, fillOpacityPress,
|
||||
bgColBorderColorPress, &borderColorPress,
|
||||
bgColBorderOpacityPress, borderOpacityPress,
|
||||
bgColText, "",
|
||||
-1);
|
||||
|
||||
background_update_image(index);
|
||||
@@ -805,6 +805,7 @@ void background_duplicate(GtkWidget *widget, gpointer data)
|
||||
bgColFillOpacity, fillOpacity,
|
||||
bgColBorderColor, borderColor,
|
||||
bgColBorderOpacity, borderOpacity,
|
||||
bgColText, "",
|
||||
bgColFillColorOver, fillColorOver,
|
||||
bgColFillOpacityOver, fillOpacityOver,
|
||||
bgColBorderColorOver, borderColorOver,
|
||||
@@ -815,7 +816,6 @@ void background_duplicate(GtkWidget *widget, gpointer data)
|
||||
bgColBorderOpacityPress, borderOpacityPress,
|
||||
bgColBorderWidth, b,
|
||||
bgColCornerRadius, r,
|
||||
bgColText, ""
|
||||
-1);
|
||||
g_boxed_free(GDK_TYPE_COLOR, fillColor);
|
||||
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_set(launcher_apps, &iter,
|
||||
appsColIcon, pixbuf,
|
||||
appsColIconName, g_strdup(iconName),
|
||||
appsColText, g_strdup(name),
|
||||
appsColPath, g_strdup(path),
|
||||
appsColIconName, g_strdup(iconName),
|
||||
-1);
|
||||
if (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_set(store, &iter,
|
||||
appsColIcon, pixbuf,
|
||||
appsColIconName, g_strdup(entry.icon),
|
||||
appsColText, g_strdup(entry.name),
|
||||
appsColPath, g_strdup(file),
|
||||
appsColIconName, g_strdup(entry.icon),
|
||||
-1);
|
||||
if (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_set(store, &iter,
|
||||
appsColIcon, pixbuf,
|
||||
appsColIconName, g_strdup(""),
|
||||
appsColText, g_strdup(file),
|
||||
appsColPath, g_strdup(file),
|
||||
appsColIconName, g_strdup(""),
|
||||
-1);
|
||||
if (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_set(selected ? launcher_apps :all_apps, &iter,
|
||||
appsColIcon, pixbuf,
|
||||
appsColIconName, g_strdup(entry->icon),
|
||||
appsColText, g_strdup(entry->name),
|
||||
appsColPath, g_strdup(entry->path),
|
||||
appsColIconName, g_strdup(entry->icon),
|
||||
-1);
|
||||
if (pixbuf)
|
||||
g_object_unref(pixbuf);
|
||||
|
||||
@@ -70,17 +70,15 @@ void relayout_fixed(Area *a)
|
||||
relayout_fixed(l->data);
|
||||
|
||||
// Recalculate size
|
||||
a->_changed = 0;
|
||||
a->_changed = FALSE;
|
||||
if (a->resize_needed && a->size_mode == LAYOUT_FIXED) {
|
||||
a->resize_needed = 0;
|
||||
a->resize_needed = FALSE;
|
||||
|
||||
if (a->_resize) {
|
||||
if (a->_resize(a)) {
|
||||
// The size hash changed => resize needed for the parent
|
||||
if (a->parent)
|
||||
((Area *)a->parent)->resize_needed = 1;
|
||||
a->_changed = 1;
|
||||
}
|
||||
if (a->_resize && a->_resize(a)) {
|
||||
// The size has changed => resize needed for the parent
|
||||
if (a->parent)
|
||||
((Area *)a->parent)->resize_needed = TRUE;
|
||||
a->_changed = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -92,10 +90,11 @@ void relayout_dynamic(Area *a, int level)
|
||||
|
||||
// Area is resized before its children
|
||||
if (a->resize_needed && a->size_mode == LAYOUT_DYNAMIC) {
|
||||
a->resize_needed = 0;
|
||||
a->resize_needed = FALSE;
|
||||
|
||||
if (a->_resize) {
|
||||
a->_resize(a);
|
||||
if (a->_resize(a))
|
||||
a->_changed = TRUE;
|
||||
// resize children with LAYOUT_DYNAMIC
|
||||
for (GList *l = a->children; l; l = l->next) {
|
||||
Area *child = ((Area *)l->data);
|
||||
@@ -119,13 +118,13 @@ void relayout_dynamic(Area *a, int level)
|
||||
if (pos != child->posx) {
|
||||
// pos changed => redraw
|
||||
child->posx = pos;
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (pos != child->posy) {
|
||||
// pos changed => redraw
|
||||
child->posy = pos;
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,13 +147,13 @@ void relayout_dynamic(Area *a, int level)
|
||||
if (pos != child->posx) {
|
||||
// pos changed => redraw
|
||||
child->posx = pos;
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (pos != child->posy) {
|
||||
// pos changed => redraw
|
||||
child->posy = pos;
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,13 +186,13 @@ void relayout_dynamic(Area *a, int level)
|
||||
if (pos != child->posx) {
|
||||
// pos changed => redraw
|
||||
child->posx = pos;
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (pos != child->posy) {
|
||||
// pos changed => redraw
|
||||
child->posy = pos;
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,7 +223,7 @@ void draw_tree(Area *a)
|
||||
return;
|
||||
|
||||
if (a->_redraw_needed) {
|
||||
a->_redraw_needed = 0;
|
||||
a->_redraw_needed = FALSE;
|
||||
draw(a);
|
||||
}
|
||||
|
||||
@@ -286,7 +285,7 @@ int relayout_with_constraint(Area *a, int maximum_size)
|
||||
modulo--;
|
||||
}
|
||||
if (child->width != old_width)
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -326,7 +325,7 @@ int relayout_with_constraint(Area *a, int maximum_size)
|
||||
modulo--;
|
||||
}
|
||||
if (child->height != old_height)
|
||||
child->_changed = 1;
|
||||
child->_changed = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -361,7 +360,7 @@ void hide(Area *a)
|
||||
|
||||
a->on_screen = FALSE;
|
||||
if (parent)
|
||||
parent->resize_needed = 1;
|
||||
parent->resize_needed = TRUE;
|
||||
if (panel_horizontal)
|
||||
a->width = 0;
|
||||
else
|
||||
@@ -374,12 +373,27 @@ void show(Area *a)
|
||||
|
||||
a->on_screen = TRUE;
|
||||
if (parent)
|
||||
parent->resize_needed = 1;
|
||||
a->resize_needed = 1;
|
||||
parent->resize_needed = TRUE;
|
||||
a->resize_needed = TRUE;
|
||||
}
|
||||
|
||||
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) {
|
||||
XFreePixmap(server.display, a->pix);
|
||||
if (a->pix_by_state[a->has_mouse_over_effect ? a->mouse_state : 0] != a->pix)
|
||||
|
||||
@@ -320,3 +320,32 @@ gulong *get_best_icon(gulong *data, int icon_count, int num, int *iw, int *ih, i
|
||||
*ih = height[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;
|
||||
}
|
||||
|
||||
@@ -33,4 +33,6 @@ void change_window_desktop(Window win, int desktop);
|
||||
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);
|
||||
|
||||
char *get_window_name(Window win);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#---- Generated by tint2conf bd50 ----
|
||||
#---- Generated by tint2conf 2e3c ----
|
||||
# See https://gitlab.com/o9000/tint2/wikis/Configure for
|
||||
# full documentation of the configuration options.
|
||||
#-------------------------------------
|
||||
@@ -67,11 +67,11 @@ border_color_pressed = #555555 100
|
||||
rounded = 2
|
||||
border_width = 1
|
||||
background_color = #222222 100
|
||||
border_color = #777777 100
|
||||
border_color = #777777 30
|
||||
background_color_hover = #222222 100
|
||||
border_color_hover = #777777 100
|
||||
border_color_hover = #777777 30
|
||||
background_color_pressed = #222222 100
|
||||
border_color_pressed = #777777 100
|
||||
border_color_pressed = #777777 30
|
||||
|
||||
#-------------------------------------
|
||||
# Panel
|
||||
@@ -85,6 +85,7 @@ panel_dock = 0
|
||||
panel_position = bottom center horizontal
|
||||
panel_layer = normal
|
||||
panel_monitor = all
|
||||
primary_monitor_first = 0
|
||||
autohide = 0
|
||||
autohide_show_timeout = 0
|
||||
autohide_hide_timeout = 0.5
|
||||
@@ -106,6 +107,7 @@ taskbar_active_background_id = 0
|
||||
taskbar_name = 1
|
||||
taskbar_hide_inactive_tasks = 0
|
||||
taskbar_hide_different_monitor = 0
|
||||
taskbar_always_show_all_desktop_tasks = 0
|
||||
taskbar_name_padding = 6 3
|
||||
taskbar_name_background_id = 6
|
||||
taskbar_name_active_background_id = 7
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#---- Generated by tint2conf 5b63 ----
|
||||
#---- Generated by tint2conf 2c73 ----
|
||||
# See https://gitlab.com/o9000/tint2/wikis/Configure for
|
||||
# full documentation of the configuration options.
|
||||
#-------------------------------------
|
||||
@@ -57,11 +57,11 @@ border_color_pressed = #999999 100
|
||||
rounded = 2
|
||||
border_width = 1
|
||||
background_color = #eeeeee 4
|
||||
border_color = #cccccc 100
|
||||
border_color = #cccccc 30
|
||||
background_color_hover = #eeeeee 22
|
||||
border_color_hover = #999999 100
|
||||
border_color_hover = #999999 30
|
||||
background_color_pressed = #dddddd 4
|
||||
border_color_pressed = #999999 100
|
||||
border_color_pressed = #999999 30
|
||||
|
||||
# Background 7: Active desktop name
|
||||
rounded = 2
|
||||
@@ -85,6 +85,7 @@ panel_dock = 0
|
||||
panel_position = bottom center horizontal
|
||||
panel_layer = normal
|
||||
panel_monitor = all
|
||||
primary_monitor_first = 0
|
||||
autohide = 0
|
||||
autohide_show_timeout = 0
|
||||
autohide_hide_timeout = 0.5
|
||||
@@ -106,6 +107,7 @@ taskbar_active_background_id = 0
|
||||
taskbar_name = 1
|
||||
taskbar_hide_inactive_tasks = 0
|
||||
taskbar_hide_different_monitor = 0
|
||||
taskbar_always_show_all_desktop_tasks = 0
|
||||
taskbar_name_padding = 6 3
|
||||
taskbar_name_background_id = 6
|
||||
taskbar_name_active_background_id = 7
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#---- Generated by tint2conf 812e ----
|
||||
#---- Generated by tint2conf ac71 ----
|
||||
# See https://gitlab.com/o9000/tint2/wikis/Configure for
|
||||
# full documentation of the configuration options.
|
||||
#-------------------------------------
|
||||
@@ -57,11 +57,11 @@ border_color_pressed = #999999 100
|
||||
rounded = 2
|
||||
border_width = 1
|
||||
background_color = #eeeeee 4
|
||||
border_color = #999999 100
|
||||
border_color = #999999 30
|
||||
background_color_hover = #eeeeee 22
|
||||
border_color_hover = #999999 100
|
||||
border_color_hover = #999999 30
|
||||
background_color_pressed = #dddddd 4
|
||||
border_color_pressed = #999999 100
|
||||
border_color_pressed = #999999 30
|
||||
|
||||
# Background 7: Active desktop name
|
||||
rounded = 2
|
||||
@@ -85,6 +85,7 @@ panel_dock = 0
|
||||
panel_position = bottom left vertical
|
||||
panel_layer = normal
|
||||
panel_monitor = all
|
||||
primary_monitor_first = 0
|
||||
autohide = 0
|
||||
autohide_show_timeout = 0
|
||||
autohide_hide_timeout = 0.5
|
||||
@@ -106,6 +107,7 @@ taskbar_active_background_id = 0
|
||||
taskbar_name = 1
|
||||
taskbar_hide_inactive_tasks = 0
|
||||
taskbar_hide_different_monitor = 0
|
||||
taskbar_always_show_all_desktop_tasks = 0
|
||||
taskbar_name_padding = 6 3
|
||||
taskbar_name_background_id = 6
|
||||
taskbar_name_active_background_id = 7
|
||||
|
||||
Reference in New Issue
Block a user