"On head" menu -- reloading and refreshing bugfix.
We should reload the contents of this menu on Xinerama layout change. I switched it from FbMenu to ToggleMenu, because the selected head wasn't being updated properly. Signed-off-by: Tomas Janousek <tomi@nomi.cz>
This commit is contained in:
parent
b405d36151
commit
4faf1bf5c3
5 changed files with 44 additions and 12 deletions
12
src/Slit.cc
12
src/Slit.cc
|
@ -48,10 +48,6 @@
|
|||
#include "RootTheme.hh"
|
||||
#include "FbMenu.hh"
|
||||
|
||||
#ifdef XINERAMA
|
||||
#include "Xinerama.hh"
|
||||
#endif // XINERAMA
|
||||
|
||||
#include "SlitTheme.hh"
|
||||
#include "SlitClient.hh"
|
||||
#include "Xutil.hh"
|
||||
|
@ -270,6 +266,9 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename)
|
|||
m_slitmenu(scr.menuTheme(),
|
||||
scr.imageControl(),
|
||||
*scr.layerManager().getLayer(Layer::MENU)),
|
||||
#ifdef XINERAMA
|
||||
m_xineramaheadmenu(0),
|
||||
#endif // XINERAMA
|
||||
frame(scr.rootWindow()),
|
||||
//For KDE dock applets
|
||||
m_kwm1_dockwindow(XInternAtom(FbTk::App::instance()->display(),
|
||||
|
@ -1113,6 +1112,10 @@ void Slit::exposeEvent(XExposeEvent &ev) {
|
|||
|
||||
void Slit::update(FbTk::Subject *subj) {
|
||||
reconfigure();
|
||||
#ifdef XINERAMA
|
||||
if (subj == &m_screen.resizeSig() && m_xineramaheadmenu)
|
||||
m_xineramaheadmenu->reloadHeads();
|
||||
#endif // XINERAMA
|
||||
}
|
||||
|
||||
void Slit::clearWindow() {
|
||||
|
@ -1254,6 +1257,7 @@ void Slit::setupMenu() {
|
|||
#ifdef XINERAMA
|
||||
if (screen().hasXinerama()) {
|
||||
m_slitmenu.insert(_FB_XTEXT(Menu, OnHead, "On Head...", "Title of On Head menu"),
|
||||
m_xineramaheadmenu =
|
||||
new XineramaHeadMenu<Slit>(
|
||||
screen().menuTheme(),
|
||||
screen(),
|
||||
|
|
|
@ -29,6 +29,10 @@
|
|||
#include "LayerMenu.hh"
|
||||
#include "Layer.hh"
|
||||
|
||||
#ifdef XINERAMA
|
||||
#include "Xinerama.hh"
|
||||
#endif // XINERAMA
|
||||
|
||||
#include "FbTk/Menu.hh"
|
||||
#include "FbTk/FbWindow.hh"
|
||||
#include "FbTk/Timer.hh"
|
||||
|
@ -144,6 +148,9 @@ private:
|
|||
SlitClients m_client_list;
|
||||
std::auto_ptr<LayerMenu> m_layermenu;
|
||||
FbMenu m_clientlist_menu, m_slitmenu;
|
||||
#ifdef XINERAMA
|
||||
XineramaHeadMenu<Slit> *m_xineramaheadmenu;
|
||||
#endif // XINERAMA
|
||||
std::string m_filename;
|
||||
|
||||
struct frame {
|
||||
|
|
|
@ -35,10 +35,6 @@
|
|||
#include "Screen.hh"
|
||||
#include "WindowCmd.hh"
|
||||
|
||||
#ifdef XINERAMA
|
||||
#include "Xinerama.hh"
|
||||
#endif // XINERAMA
|
||||
|
||||
#include "Strut.hh"
|
||||
#include "FbTk/CommandParser.hh"
|
||||
#include "Layer.hh"
|
||||
|
@ -216,6 +212,9 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, size_t width):
|
|||
m_toolbarmenu(scrn.menuTheme(),
|
||||
scrn.imageControl(),
|
||||
*scrn.layerManager().getLayer(Layer::MENU)),
|
||||
#ifdef XINERAMA
|
||||
m_xineramaheadmenu(0),
|
||||
#endif // XINERAMA
|
||||
m_theme(scrn.screenNumber()),
|
||||
m_tool_factory(scrn),
|
||||
m_strut(0),
|
||||
|
@ -629,6 +628,10 @@ void Toolbar::update(FbTk::Subject *subj) {
|
|||
else
|
||||
reconfigure();
|
||||
|
||||
#ifdef XINERAMA
|
||||
if (subj == &m_screen.resizeSig() && m_xineramaheadmenu)
|
||||
m_xineramaheadmenu->reloadHeads();
|
||||
#endif // XINERAMA
|
||||
}
|
||||
|
||||
void Toolbar::setPlacement(Toolbar::Placement where) {
|
||||
|
@ -872,6 +875,7 @@ void Toolbar::setupMenus(bool skip_new_placement) {
|
|||
#ifdef XINERAMA
|
||||
if (screen().hasXinerama()) {
|
||||
menu().insert(_FB_XTEXT(Menu, OnHead, "On Head...", "Title of On Head menu"),
|
||||
m_xineramaheadmenu =
|
||||
new XineramaHeadMenu<Toolbar>(screen().menuTheme(),
|
||||
screen(),
|
||||
screen().imageControl(),
|
||||
|
|
|
@ -31,6 +31,10 @@
|
|||
#include "ToolTheme.hh"
|
||||
#include "Layer.hh"
|
||||
|
||||
#ifdef XINERAMA
|
||||
#include "Xinerama.hh"
|
||||
#endif // XINERAMA
|
||||
|
||||
#include "FbTk/Timer.hh"
|
||||
#include "FbTk/Resource.hh"
|
||||
#include "FbTk/Observer.hh"
|
||||
|
@ -159,6 +163,9 @@ private:
|
|||
FbTk::XLayerItem m_layeritem; ///< layer item, must be declared before layermenu
|
||||
LayerMenu m_layermenu;
|
||||
FbMenu m_placementmenu, m_toolbarmenu;
|
||||
#ifdef XINERAMA
|
||||
XineramaHeadMenu<Toolbar> *m_xineramaheadmenu;
|
||||
#endif // XINERAMA
|
||||
|
||||
|
||||
// themes
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "FbMenu.hh"
|
||||
#include "fluxbox.hh"
|
||||
#include "Screen.hh"
|
||||
|
||||
#include "FbTk/RefCount.hh"
|
||||
#include "FbTk/SimpleCommand.hh"
|
||||
|
@ -59,14 +60,16 @@ private:
|
|||
|
||||
/// Create a xinerama menu
|
||||
template <typename ItemType>
|
||||
class XineramaHeadMenu : public FbMenu {
|
||||
class XineramaHeadMenu : public ToggleMenu {
|
||||
public:
|
||||
XineramaHeadMenu(FbTk::ThemeProxy<FbTk::MenuTheme> &tm, BScreen &screen,
|
||||
FbTk::ImageControl &imgctrl, FbTk::XLayer &layer,
|
||||
ItemType &item, const FbTk::FbString & title = "");
|
||||
void reloadHeads();
|
||||
|
||||
private:
|
||||
ItemType &m_object;
|
||||
BScreen &m_screen;
|
||||
};
|
||||
|
||||
|
||||
|
@ -75,15 +78,22 @@ XineramaHeadMenu<ItemType>::XineramaHeadMenu(
|
|||
FbTk::ThemeProxy<FbTk::MenuTheme> &tm, BScreen &screen,
|
||||
FbTk::ImageControl &imgctrl, FbTk::XLayer &layer, ItemType &item,
|
||||
const FbTk::FbString & title):
|
||||
FbMenu(tm, imgctrl, layer),
|
||||
m_object(item)
|
||||
ToggleMenu(tm, imgctrl, layer),
|
||||
m_object(item), m_screen(screen)
|
||||
{
|
||||
setLabel(title);
|
||||
reloadHeads();
|
||||
}
|
||||
|
||||
template <typename ItemType>
|
||||
void XineramaHeadMenu<ItemType>::reloadHeads()
|
||||
{
|
||||
removeAll();
|
||||
FbTk::RefCount<FbTk::Command<void> > saverc_cmd(new FbTk::SimpleCommand<Fluxbox>(
|
||||
*Fluxbox::instance(),
|
||||
&Fluxbox::save_rc));
|
||||
char tname[128];
|
||||
for (int i=1; i <= screen.numHeads(); ++i) {
|
||||
for (int i=1; i <= m_screen.numHeads(); ++i) {
|
||||
// TODO: nls
|
||||
/*
|
||||
sprintf(tname, I18n::instance()->
|
||||
|
|
Loading…
Reference in a new issue