all repos — fluxbox @ f1c5abd17ffd572a7586d396622c2891881e5ca4

custom fork of the fluxbox windowmanager

i added an attribute to FbWindow to mark windows which are only used as
"carrier" (maybe a temporarly name?) ... carriers dont need background-updates
.. ever.

this leads to a big performance"boost" over the last commits. before we
updated also the windows which are the hosts for the apps (m_window and
        m_clientarea in FbWinFrame) -> bad idea.
mathias mathias
commit

f1c5abd17ffd572a7586d396622c2891881e5ca4

parent

c0f725806323e370d8eda922e680a0b17db17175

4 files changed, 20 insertions(+), 8 deletions(-)

jump to
M ChangeLogChangeLog

@@ -1,8 +1,8 @@

(Format: Year/Month/Day) Changes for 0.9.13 *05/04/27: - * Fix some initialisation, plus setting background too much (Simon) - FbWindow.cc + * Fix some initialisation, plus setting background too much (Simon + Mathias) + FbTk/FbWindow.cc/hh FbWinFrame.cc * Add some extremely basic handling for icon pixmaps that aren't the same depth as the screen (treat all as 1-bit, easy to handle) (Simon)
M src/FbTk/FbWindow.ccsrc/FbTk/FbWindow.cc

@@ -46,7 +46,7 @@ namespace FbTk {

FbWindow::FbWindow():FbDrawable(), m_parent(0), m_screen_num(0), m_window(0), m_x(0), m_y(0), m_width(0), m_height(0), m_border_width(0), m_depth(0), m_destroy(true), - m_lastbg_color_set(false), m_lastbg_color(0), m_lastbg_pm(0), m_renderer(0) { + m_lastbg_color_set(false), m_lastbg_color(0), m_lastbg_pm(0), m_renderer(0), m_is_carrier(false) { }

@@ -58,7 +58,8 @@ m_width(the_copy.width()), m_height(the_copy.height()),

m_border_width(the_copy.borderWidth()), m_depth(the_copy.depth()), m_destroy(true), m_lastbg_color_set(false), m_lastbg_color(0), - m_lastbg_pm(0), m_renderer(the_copy.m_renderer) { + m_lastbg_pm(0), m_renderer(the_copy.m_renderer), + m_is_carrier(false) { the_copy.m_window = 0; }

@@ -76,7 +77,7 @@ m_screen_num(screen_num),

m_destroy(true), m_lastbg_color_set(false), m_lastbg_color(0), - m_lastbg_pm(0), m_renderer(0) { + m_lastbg_pm(0), m_renderer(0), m_is_carrier(false) { create(RootWindow(display(), screen_num), x, y, width, height, eventmask,

@@ -93,7 +94,7 @@ m_parent(&parent),

m_screen_num(parent.screenNumber()), m_destroy(true), m_lastbg_color_set(false), m_lastbg_color(0), - m_lastbg_pm(0), m_renderer(0) { + m_lastbg_pm(0), m_renderer(0), m_is_carrier(false) { create(parent.window(), x, y, width, height, eventmask, override_redirect, save_unders, depth, class_type);

@@ -110,7 +111,7 @@ m_border_width(0),

m_depth(0), m_destroy(false), // don't destroy this window m_lastbg_color_set(false), m_lastbg_color(0), - m_lastbg_pm(0), m_renderer(0) { + m_lastbg_pm(0), m_renderer(0), m_is_carrier(false) { setNew(client); }

@@ -150,10 +151,14 @@ updateBackground(false);

} void FbWindow::updateBackground(bool only_if_alpha) { + + if (isCarrier()) + return; + Pixmap newbg = m_lastbg_pm; unsigned char alpha = 255; bool free_newbg = false; - + if (m_lastbg_pm == None && !m_lastbg_color_set) return;
M src/FbTk/FbWindow.hhsrc/FbTk/FbWindow.hh

@@ -187,6 +187,9 @@

void setRenderer(FbWindowRenderer &renderer) { m_renderer = &renderer; } void sendConfigureNotify(int x, int y, unsigned int width, unsigned int height); + /// this window is basicly a carrier and does not need background-updates + void setCarrier(bool flag) { m_is_carrier = flag; } + bool isCarrier() const { return m_is_carrier; } /// forces full background change, recalcing of alpha values if necessary void updateBackground(bool only_if_alpha);

@@ -221,6 +224,8 @@ unsigned long m_lastbg_color;

Pixmap m_lastbg_pm; FbWindowRenderer *m_renderer; + + bool m_is_carrier; }; bool operator == (Window win, const FbWindow &fbwin);
M src/FbWinFrame.ccsrc/FbWinFrame.cc

@@ -86,6 +86,8 @@ m_need_render(true),

m_themelistener(*this), m_shape(new Shape(m_window, theme.shapePlace())) { m_theme.reconfigSig().attach(&m_themelistener); + m_window.setCarrier(true); + m_clientarea.setCarrier(true); init(); }