From 5a789c2d7f1715646778e1f5cd77ae004f7e6cc7 Mon Sep 17 00:00:00 2001 From: "google@craigoakes.com" Date: Sat, 31 Jan 2015 05:17:54 +0000 Subject: [PATCH] Revert panel to _NET_WM_WINDOW_TYPE_DOCK, implement panel_layer=float (Issue 461). git-svn-id: http://tint2.googlecode.com/svn/trunk@677 121b4492-b84c-0410-8b4c-0d4edfb3f3cc --- src/config.c | 2 ++ src/panel.c | 28 +++++++++++++++++++++++----- src/panel.h | 2 +- src/tint2conf/properties.c | 1 + src/tint2conf/properties_rw.c | 12 ++++++++---- src/tint2conf/tintwizard.py | 2 +- 6 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/config.c b/src/config.c index d016bea..6a82f78 100644 --- a/src/config.c +++ b/src/config.c @@ -280,6 +280,8 @@ void add_entry (char *key, char *value) panel_layer = BOTTOM_LAYER; else if (strcmp(value, "top") == 0) panel_layer = TOP_LAYER; + else if (strcmp(value, "float") == 0) + panel_layer = FLOAT_LAYER; else panel_layer = NORMAL_LAYER; } diff --git a/src/panel.c b/src/panel.c index 9c91475..bc38454 100644 --- a/src/panel.c +++ b/src/panel.c @@ -510,18 +510,36 @@ void set_panel_properties(Panel *p) } // Dock - long val = panel_dock ? server.atom._NET_WM_WINDOW_TYPE_DOCK : server.atom._NET_WM_WINDOW_TYPE_NORMAL; + long val = server.atom._NET_WM_WINDOW_TYPE_DOCK; XChangeProperty (server.dsp, p->main_win, server.atom._NET_WM_WINDOW_TYPE, XA_ATOM, 32, PropModeReplace, (unsigned char *) &val, 1); - // Sticky and below other window val = ALLDESKTOP; XChangeProperty (server.dsp, p->main_win, server.atom._NET_WM_DESKTOP, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1); - Atom state[4]; + + Atom state[5]; + int nb_atoms; state[0] = server.atom._NET_WM_STATE_SKIP_PAGER; state[1] = server.atom._NET_WM_STATE_SKIP_TASKBAR; state[2] = server.atom._NET_WM_STATE_STICKY; - state[3] = panel_layer == BOTTOM_LAYER ? server.atom._NET_WM_STATE_BELOW : server.atom._NET_WM_STATE_ABOVE; - int nb_atoms = panel_layer == NORMAL_LAYER ? 3 : 4; + switch ( panel_layer ) { + case BOTTOM_LAYER: + state[3] = server.atom._NET_WM_STATE_BELOW; + nb_atoms = 4; + break; + case NORMAL_LAYER: + nb_atoms = 3; + break; + case TOP_LAYER: + state[3] = server.atom._NET_WM_STATE_ABOVE; + nb_atoms = 4; + break; + case FLOAT_LAYER: + // Float above or below (allowed by some WM for some layers) + state[3] = server.atom._NET_WM_STATE_BELOW; + state[4] = server.atom._NET_WM_STATE_ABOVE; + nb_atoms = 5; + break; + } XChangeProperty (server.dsp, p->main_win, server.atom._NET_WM_STATE, XA_ATOM, 32, PropModeReplace, (unsigned char *) state, nb_atoms); // Unfocusable diff --git a/src/panel.h b/src/panel.h index e0d2f60..788093a 100644 --- a/src/panel.h +++ b/src/panel.h @@ -39,7 +39,7 @@ extern int mouse_tilt_right; //panel mode enum { SINGLE_DESKTOP=0, MULTI_DESKTOP }; -enum { BOTTOM_LAYER, NORMAL_LAYER, TOP_LAYER }; +enum { BOTTOM_LAYER, NORMAL_LAYER, TOP_LAYER, FLOAT_LAYER }; extern int panel_mode; extern int wm_menu; extern int panel_dock; diff --git a/src/tint2conf/properties.c b/src/tint2conf/properties.c index 60c3cb7..3d81816 100644 --- a/src/tint2conf/properties.c +++ b/src/tint2conf/properties.c @@ -985,6 +985,7 @@ void create_panel(GtkWidget *parent) gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_layer), _("Top")); gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_layer), _("Normal")); gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_layer), _("Bottom")); + gtk_combo_box_append_text(GTK_COMBO_BOX(panel_combo_layer), _("Float")); label = gtk_label_new(_("Maximized window")); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); diff --git a/src/tint2conf/properties_rw.c b/src/tint2conf/properties_rw.c index 488853b..d270c1f 100644 --- a/src/tint2conf/properties_rw.c +++ b/src/tint2conf/properties_rw.c @@ -138,10 +138,12 @@ void config_write_panel(FILE *fp) fprintf(fp, "\n"); fprintf(fp, "panel_layer = "); - if (gtk_combo_box_get_active(GTK_COMBO_BOX(panel_combo_layer)) == 0) { + if (gtk_combo_box_get_active(GTK_COMBO_BOX(panel_combo_layer)) == 2) { fprintf(fp, "top"); } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(panel_combo_layer)) == 1) { - fprintf(fp, "center"); + fprintf(fp, "normal"); + } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(panel_combo_layer)) == 3) { + fprintf(fp, "float"); } else { fprintf(fp, "bottom"); } @@ -687,9 +689,11 @@ void add_entry(char *key, char *value) } else if (strcmp(key, "panel_layer") == 0) { if (strcmp(value, "bottom") == 0) - gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_layer), 2); - else if (strcmp(value, "top") == 0) gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_layer), 0); + else if (strcmp(value, "top") == 0) + gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_layer), 2); + else if (strcmp(value, "float") == 0) + gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_layer), 3); else gtk_combo_box_set_active(GTK_COMBO_BOX(panel_combo_layer), 1); } diff --git a/src/tint2conf/tintwizard.py b/src/tint2conf/tintwizard.py index aa6b37c..2bfbb59 100755 --- a/src/tint2conf/tintwizard.py +++ b/src/tint2conf/tintwizard.py @@ -502,7 +502,7 @@ class TintWizardGUI(gtk.Window): self.registerComponent("panel_dock", self.panelDock) createLabel(self.tablePanelSettings, text="Panel Layer", gridX=0, gridY=2, xPadding=10) - self.panelLayer = createComboBox(self.tablePanelSettings, ["bottom", "top", "normal"], gridX=1, gridY=2, handler=self.changeOccurred) + self.panelLayer = createComboBox(self.tablePanelSettings, ["bottom", "top", "normal", "float"], gridX=1, gridY=2, handler=self.changeOccurred) self.registerComponent("panel_layer", self.panelLayer) createLabel(self.tablePanelSettings, text="Strut Policy", gridX=0, gridY=3, xPadding=10)