Compare commits

..

1 Commits

Author SHA1 Message Date
Chris Lee
c1a3cc7977 add refresh-execp message 2021-12-04 10:49:03 +01:00
24 changed files with 3689 additions and 3854 deletions

View File

@@ -35,7 +35,6 @@ Contributors:
heisenbug (https://gitlab.com/heisenbugh) : taskbar button tinting with icon color heisenbug (https://gitlab.com/heisenbugh) : taskbar button tinting with icon color
Fabian Carlström : taskbar sort order by app name Fabian Carlström : taskbar sort order by app name
Chris Billington (https://gitlab.com/chrisjbillington) : panel struts pivoting Chris Billington (https://gitlab.com/chrisjbillington) : panel struts pivoting
Arash Rohani <rohani.arash@pm.me> : helped with execp refresh
Translations: Translations:
Bosnian: Bosnian:

View File

@@ -290,7 +290,6 @@ add_executable(tint2-send src/tint2-send/tint2-send.c)
target_link_libraries(tint2-send ${X11_LIBRARIES}) target_link_libraries(tint2-send ${X11_LIBRARIES})
install( TARGETS tint2 DESTINATION bin ) install( TARGETS tint2 DESTINATION bin )
install( TARGETS tint2-send DESTINATION bin )
install( FILES tint2.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps ) install( FILES tint2.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps )
install( FILES tint2.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) install( FILES tint2.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications )
install( FILES themes/tint2rc DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/xdg/tint2 ) install( FILES themes/tint2rc DESTINATION ${CMAKE_INSTALL_FULL_SYSCONFDIR}/xdg/tint2 )

View File

@@ -1,6 +1,3 @@
2021-12-11 master
- Enhancements:
- Added command to refresh executors (issue #747)
2021-12-04 17.0.2 2021-12-04 17.0.2
- Fixes: - Fixes:
- On dual monitor, when minimizing Chrome window it minimizes on the wrong monitor panel (issue #818) - On dual monitor, when minimizing Chrome window it minimizes on the wrong monitor panel (issue #818)

View File

@@ -1,8 +1,4 @@
# Latest stable release: 17.0.2 # Latest stable release: 17.0.2
The final release of tint2 is 17.0.2.
The code is frozen and no more feature requests are accepted.
Changes: https://gitlab.com/o9000/tint2/blob/17.0.2/ChangeLog Changes: https://gitlab.com/o9000/tint2/blob/17.0.2/ChangeLog
Documentation: [doc/tint2.md](doc/tint2.md) Documentation: [doc/tint2.md](doc/tint2.md)

View File

@@ -595,7 +595,6 @@ panel_size = 94% 30
<h3 id="executor">Executor<a name="executor" href="#executor" class="md2man-permalink" title="permalink"></a></h3> <h3 id="executor">Executor<a name="executor" href="#executor" class="md2man-permalink" title="permalink"></a></h3>
<ul> <ul>
<li><p><code>execp = new</code> : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple <code>E</code>s in <code>panel_items</code>. <em>(since 0.12.4)</em></p></li> <li><p><code>execp = new</code> : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple <code>E</code>s in <code>panel_items</code>. <em>(since 0.12.4)</em></p></li>
<li><p><code>execp_name = text</code> : A name that can be used with <code>tint2-send refresh-execp</code> to re-execute the command.</p></li>
<li><p><code>execp_command = text</code> : Command to execute. <em>(since 0.12.4)</em></p></li> <li><p><code>execp_command = text</code> : Command to execute. <em>(since 0.12.4)</em></p></li>
<li><p><code>execp_interval = integer</code> : The command is executed again after <code>execp_interval</code> seconds from the moment it exits. If zero, the command is executed only once. <em>(since 0.12.4)</em></p></li> <li><p><code>execp_interval = integer</code> : The command is executed again after <code>execp_interval</code> seconds from the moment it exits. If zero, the command is executed only once. <em>(since 0.12.4)</em></p></li>
<li><p><code>execp_continuous = integer</code> : If non-zero, the last <code>execp_continuous</code> lines from the output of the command are displayed, every <code>execp_continuous</code> lines; this is useful for showing the output of commands that run indefinitely, such as <code>ping 127.0.0.1</code>. If zero, the output of the command is displayed after it finishes executing. <em>(since 0.12.4)</em></p></li> <li><p><code>execp_continuous = integer</code> : If non-zero, the last <code>execp_continuous</code> lines from the output of the command are displayed, every <code>execp_continuous</code> lines; this is useful for showing the output of commands that run indefinitely, such as <code>ping 127.0.0.1</code>. If zero, the output of the command is displayed after it finishes executing. <em>(since 0.12.4)</em></p></li>

View File

@@ -720,8 +720,6 @@ To hide the clock, comment \fB\fCtime1_format\fR and \fB\fCtime2_format\fR\&.
.IP \(bu 2 .IP \(bu 2
\fB\fCexecp = new\fR : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple \fB\fCE\fRs in \fB\fCpanel_items\fR\&. \fI(since 0.12.4)\fP \fB\fCexecp = new\fR : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple \fB\fCE\fRs in \fB\fCpanel_items\fR\&. \fI(since 0.12.4)\fP
.IP \(bu 2 .IP \(bu 2
\fB\fCexecp_name = text\fR : A name that can be used with \fB\fCtint2\-send refresh\-execp\fR to re\-execute the command.
.IP \(bu 2
\fB\fCexecp_command = text\fR : Command to execute. \fI(since 0.12.4)\fP \fB\fCexecp_command = text\fR : Command to execute. \fI(since 0.12.4)\fP
.IP \(bu 2 .IP \(bu 2
\fB\fCexecp_interval = integer\fR : The command is executed again after \fB\fCexecp_interval\fR seconds from the moment it exits. If zero, the command is executed only once. \fI(since 0.12.4)\fP \fB\fCexecp_interval = integer\fR : The command is executed again after \fB\fCexecp_interval\fR seconds from the moment it exits. If zero, the command is executed only once. \fI(since 0.12.4)\fP

View File

@@ -314,7 +314,6 @@ panel_size = 94% 30
<h3 id="executor">Executor<a name="executor" href="#executor" class="md2man-permalink" title="permalink"></a></h3> <h3 id="executor">Executor<a name="executor" href="#executor" class="md2man-permalink" title="permalink"></a></h3>
<ul> <ul>
<li><p><code>execp = new</code> : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple <code>E</code>s in <code>panel_items</code>. <em>(since 0.12.4)</em></p></li> <li><p><code>execp = new</code> : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple <code>E</code>s in <code>panel_items</code>. <em>(since 0.12.4)</em></p></li>
<li><p><code>execp_name = text</code> : A name that can be used with <code>tint2-send refresh-execp</code> to re-execute the command.</p></li>
<li><p><code>execp_command = text</code> : Command to execute. <em>(since 0.12.4)</em></p></li> <li><p><code>execp_command = text</code> : Command to execute. <em>(since 0.12.4)</em></p></li>
<li><p><code>execp_interval = integer</code> : The command is executed again after <code>execp_interval</code> seconds from the moment it exits. If zero, the command is executed only once. <em>(since 0.12.4)</em></p></li> <li><p><code>execp_interval = integer</code> : The command is executed again after <code>execp_interval</code> seconds from the moment it exits. If zero, the command is executed only once. <em>(since 0.12.4)</em></p></li>
<li><p><code>execp_continuous = integer</code> : If non-zero, the last <code>execp_continuous</code> lines from the output of the command are displayed, every <code>execp_continuous</code> lines; this is useful for showing the output of commands that run indefinitely, such as <code>ping 127.0.0.1</code>. If zero, the output of the command is displayed after it finishes executing. <em>(since 0.12.4)</em></p></li> <li><p><code>execp_continuous = integer</code> : If non-zero, the last <code>execp_continuous</code> lines from the output of the command are displayed, every <code>execp_continuous</code> lines; this is useful for showing the output of commands that run indefinitely, such as <code>ping 127.0.0.1</code>. If zero, the output of the command is displayed after it finishes executing. <em>(since 0.12.4)</em></p></li>

View File

@@ -593,8 +593,6 @@ The action semantics:
* `execp = new` : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple `E`s in `panel_items`. *(since 0.12.4)* * `execp = new` : Begins the configuration of a new executor plugin. Multiple such plugins are supported; just use multiple `E`s in `panel_items`. *(since 0.12.4)*
* `execp_name = text` : A name that can be used with `tint2-send refresh-execp` to re-execute the command.
* `execp_command = text` : Command to execute. *(since 0.12.4)* * `execp_command = text` : Command to execute. *(since 0.12.4)*
* `execp_interval = integer` : The command is executed again after `execp_interval` seconds from the moment it exits. If zero, the command is executed only once. *(since 0.12.4)* * `execp_interval = integer` : The command is executed again after `execp_interval` seconds from the moment it exits. If zero, the command is executed only once. *(since 0.12.4)*

View File

@@ -683,14 +683,6 @@ void add_entry(char *key, char *value)
/* Execp */ /* Execp */
else if (strcmp(key, "execp") == 0) { else if (strcmp(key, "execp") == 0) {
panel_config.execp_list = g_list_append(panel_config.execp_list, create_execp()); panel_config.execp_list = g_list_append(panel_config.execp_list, create_execp());
} else if (strcmp(key, "execp_name") == 0) {
Execp *execp = get_or_create_last_execp();
execp->backend->name[0] = 0;
if (strlen(value) > sizeof(execp->backend->name) - 1)
fprintf(stderr, RED "tint2: execp_name cannot be more than %ld bytes: '%s'" RESET "\n",
sizeof(execp->backend->name) - 1, value);
else if (strlen(value) > 0)
snprintf(execp->backend->name, sizeof(execp->backend->name), value);
} else if (strcmp(key, "execp_command") == 0) { } else if (strcmp(key, "execp_command") == 0) {
Execp *execp = get_or_create_last_execp(); Execp *execp = get_or_create_last_execp();
free_and_null(execp->backend->command); free_and_null(execp->backend->command);

View File

@@ -20,7 +20,6 @@ extern bool debug_executors;
typedef struct ExecpBackend { typedef struct ExecpBackend {
// Config: // Config:
char name[21];
// Command to execute at a specified interval // Command to execute at a specified interval
char *command; char *command;
// Interval in seconds // Interval in seconds
@@ -155,6 +154,4 @@ void execp_default_font_changed();
void handle_execp_events(); void handle_execp_events();
void execp_force_update(Execp *execp);
#endif // EXECPLUGIN_H #endif // EXECPLUGIN_H

View File

@@ -32,6 +32,7 @@
#include <X11/extensions/Xdamage.h> #include <X11/extensions/Xdamage.h>
#include <Imlib2.h> #include <Imlib2.h>
#include <signal.h> #include <signal.h>
#include <unistd.h>
#include <sys/types.h> #include <sys/types.h>
#include <pwd.h> #include <pwd.h>
#include <time.h> #include <time.h>
@@ -548,13 +549,7 @@ void handle_x_event(XEvent *e)
e->xclient.format == 8) { e->xclient.format == 8) {
char name[sizeof(e->xclient.data.b) + 1] = {}; char name[sizeof(e->xclient.data.b) + 1] = {};
memcpy(name, e->xclient.data.b, sizeof(e->xclient.data.b)); memcpy(name, e->xclient.data.b, sizeof(e->xclient.data.b));
for (GList *l = panel_config.execp_list; l; l = l->next) { printf("TODO: refresh execp: %s\n", name);
Execp *execp = (Execp *)l->data;
if (strncmp(name, execp->backend->name, sizeof(execp->backend->name) - 1) == 0) {
fprintf(stderr, "tint2: Refreshing executor: %s\n", name);
execp_force_update(execp);
}
}
} }
break; break;
} }

View File

@@ -292,10 +292,9 @@ void on_change_systray(void *obj)
} }
TrayWindow *traywin; TrayWindow *traywin;
GSList *l, *next; GSList *l;
int i; int i;
for (i = 1, l = systray.list_icons; l; i++, l = next) { for (i = 1, l = systray.list_icons; l; i++, l = l->next) {
next = l->next;
traywin = (TrayWindow *)l->data; traywin = (TrayWindow *)l->data;
traywin->y = posy; traywin->y = posy;

View File

@@ -45,8 +45,8 @@ int is_tint2(Window window)
XWindowAttributes attr = {}; XWindowAttributes attr = {};
if (!XGetWindowAttributes(display, window, &attr)) if (!XGetWindowAttributes(display, window, &attr))
return 0; return 0;
// if (attr.map_state != IsViewable) if (attr.map_state != IsViewable)
// return 0; return 0;
char *wm_class = get_property(window, XA_STRING, "WM_NAME"); char *wm_class = get_property(window, XA_STRING, "WM_NAME");
if (!wm_class) { if (!wm_class) {
@@ -96,7 +96,7 @@ void handle_tint2_window(Window window, char *action, char **args)
return; return;
} }
if (strlen(name) > sizeof(event.xclient.data.b)) { if (strlen(name) > sizeof(event.xclient.data.b)) {
fprintf(stderr, "Error: execp name bigger than %ld bytes\n", sizeof(event.xclient.data.b)); fprintf(stderr, "Error: execp name too long\n");
return; return;
} }
fprintf(stderr, "Refreshing execp '%s' for window: %lx\n", name, window); fprintf(stderr, "Refreshing execp '%s' for window: %lx\n", name, window);
@@ -141,7 +141,7 @@ int main(int argc, char **argv)
argc--, argv++; argc--, argv++;
if (!argc) { if (!argc) {
fprintf(stderr, "Usage: tint2-send [show|hide|refresh-execp]\n"); fprintf(stderr, "Usage: tint2-show [show|hide|refresh-execp]\n");
exit(1); exit(1);
} }
char *action = argv[0]; char *action = argv[0];

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -4271,23 +4271,6 @@ void create_execp(GtkWidget *notebook, int i)
gtk_table_set_col_spacings(GTK_TABLE(table), COL_SPACING); gtk_table_set_col_spacings(GTK_TABLE(table), COL_SPACING);
row = 0, col = 2; row = 0, col = 2;
label = gtk_label_new(_("Name"));
gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
gtk_widget_show(label);
gtk_table_attach(GTK_TABLE(table), label, col, col + 1, row, row + 1, GTK_FILL, 0, 0, 0);
col++;
executor->execp_name = gtk_entry_new();
gtk_widget_show(executor->execp_name);
gtk_entry_set_width_chars(GTK_ENTRY(executor->execp_name), 20);
gtk_entry_set_max_length(GTK_ENTRY(executor->execp_name), 20);
gtk_table_attach(GTK_TABLE(table), executor->execp_name, col, col + 1, row, row + 1, GTK_FILL, 0, 0, 0);
col++;
gtk_widget_set_tooltip_text(executor->execp_name,
_("Specifies a name that can be used with `tint2-send refresh-execp` to re-execute "
"the command."));
row++, col = 2;
label = gtk_label_new(_("Command")); label = gtk_label_new(_("Command"));
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);

View File

@@ -132,7 +132,6 @@ typedef struct Executor {
GtkWidget *container; GtkWidget *container;
GtkWidget *page_execp; GtkWidget *page_execp;
GtkWidget *page_label; GtkWidget *page_label;
GtkWidget *execp_name;
GtkWidget *execp_command, *execp_interval, *execp_has_icon, *execp_cache_icon, *execp_show_tooltip; GtkWidget *execp_command, *execp_interval, *execp_has_icon, *execp_cache_icon, *execp_show_tooltip;
GtkWidget *execp_continuous, *execp_markup, *execp_tooltip, *execp_monitor; GtkWidget *execp_continuous, *execp_markup, *execp_tooltip, *execp_monitor;
GtkWidget *execp_left_command, *execp_right_command; GtkWidget *execp_left_command, *execp_right_command;

View File

@@ -857,7 +857,6 @@ void config_write_execp(FILE *fp)
Executor *executor = &g_array_index(executors, Executor, i); Executor *executor = &g_array_index(executors, Executor, i);
fprintf(fp, "execp = new\n"); fprintf(fp, "execp = new\n");
fprintf(fp, "execp_name = %s\n", gtk_entry_get_text(GTK_ENTRY(executor->execp_name)));
fprintf(fp, "execp_command = %s\n", gtk_entry_get_text(GTK_ENTRY(executor->execp_command))); fprintf(fp, "execp_command = %s\n", gtk_entry_get_text(GTK_ENTRY(executor->execp_command)));
fprintf(fp, "execp_interval = %d\n", (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(executor->execp_interval))); fprintf(fp, "execp_interval = %d\n", (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(executor->execp_interval)));
fprintf(fp, fprintf(fp,
@@ -1963,8 +1962,6 @@ void add_entry(char *key, char *value)
/* Executor */ /* Executor */
else if (strcmp(key, "execp") == 0) { else if (strcmp(key, "execp") == 0) {
execp_create_new(); execp_create_new();
} else if (strcmp(key, "execp_name") == 0) {
gtk_entry_set_text(GTK_ENTRY(execp_get_last()->execp_name), value);
} else if (strcmp(key, "execp_command") == 0) { } else if (strcmp(key, "execp_command") == 0) {
gtk_entry_set_text(GTK_ENTRY(execp_get_last()->execp_command), value); gtk_entry_set_text(GTK_ENTRY(execp_get_last()->execp_command), value);
} else if (strcmp(key, "execp_interval") == 0) { } else if (strcmp(key, "execp_interval") == 0) {