actions: toggle screen lock: check if screen is lockable before asking for width

This commit is contained in:
Andrzej Rybczak
2015-04-18 20:51:03 +02:00
parent ccad8fcf06
commit 7bcf79109f
20 changed files with 31 additions and 62 deletions

View File

@@ -1564,14 +1564,18 @@ void ToggleScreenLock::run()
{ {
using Global::wFooter; using Global::wFooter;
using Global::myLockedScreen; using Global::myLockedScreen;
// FIXME: check if screen can be locked before prompting for width const char *msg_unlockable_screen = "Current screen can't be locked";
if (myLockedScreen != 0) if (myLockedScreen != nullptr)
{ {
BaseScreen::unlock(); BaseScreen::unlock();
Actions::setResizeFlags(); Actions::setResizeFlags();
myScreen->resize(); myScreen->resize();
Statusbar::print("Screen unlocked"); Statusbar::print("Screen unlocked");
} }
else if (!myScreen->isLockable())
{
Statusbar::print(msg_unlockable_screen);
}
else else
{ {
unsigned part = Config.locked_screen_width_part*100; unsigned part = Config.locked_screen_width_part*100;
@@ -1586,7 +1590,7 @@ void ToggleScreenLock::run()
if (myScreen->lock()) if (myScreen->lock())
Statusbar::printf("Screen locked (with %1%%% width)", part); Statusbar::printf("Screen locked (with %1%%% width)", part);
else else
Statusbar::print("Current screen can't be locked"); Statusbar::print(msg_unlockable_screen);
} }
} }

View File

@@ -43,6 +43,7 @@ struct Browser: Screen<NC::Menu<MPD::Item>>, HasSongs, Searchable, Tabbable
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// Searchable implementation // Searchable implementation
@@ -73,9 +74,6 @@ struct Browser: Screen<NC::Menu<MPD::Item>>, HasSongs, Searchable, Tabbable
static void fetchSupportedExtensions(); static void fetchSupportedExtensions();
protected:
virtual bool isLockable() OVERRIDE { return true; }
private: private:
bool m_update_request; bool m_update_request;
bool m_local_browser; bool m_local_browser;

View File

@@ -46,10 +46,8 @@ struct Clock: Screen<NC::Window>, Tabbable
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual void mouseButtonPressed(MEVENT) OVERRIDE { } virtual void mouseButtonPressed(MEVENT) OVERRIDE { }
virtual bool isMergable() OVERRIDE { return true; }
protected:
virtual bool isLockable() OVERRIDE { return false; } virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return true; }
private: private:
NC::Window m_pane; NC::Window m_pane;

View File

@@ -40,10 +40,8 @@ struct Help: Screen<NC::Scrollpad>, Tabbable
virtual void enterPressed() OVERRIDE { } virtual void enterPressed() OVERRIDE { }
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual bool isMergable() OVERRIDE { return true; }
protected:
virtual bool isLockable() OVERRIDE { return true; } virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; }
}; };
extern Help *myHelp; extern Help *myHelp;

View File

@@ -48,6 +48,7 @@ struct Lastfm: Screen<NC::Scrollpad>, Tabbable
virtual void enterPressed() OVERRIDE { } virtual void enterPressed() OVERRIDE { }
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
template <typename ServiceT> template <typename ServiceT>
@@ -69,9 +70,6 @@ struct Lastfm: Screen<NC::Scrollpad>, Tabbable
m_title = ToWString(m_service->name()); m_title = ToWString(m_service->name());
} }
protected:
virtual bool isLockable() OVERRIDE { return false; }
private: private:
void getResult(); void getResult();

View File

@@ -45,6 +45,7 @@ struct Lyrics: Screen<NC::Scrollpad>, Tabbable
virtual void enterPressed() OVERRIDE { } virtual void enterPressed() OVERRIDE { }
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// private members // private members
@@ -60,9 +61,6 @@ struct Lyrics: Screen<NC::Scrollpad>, Tabbable
bool Reload; bool Reload;
protected:
virtual bool isLockable() OVERRIDE { return false; }
private: private:
void Load(); void Load();

View File

@@ -46,6 +46,7 @@ struct MediaLibrary: Screen<NC::Window *>, HasColumns, HasSongs, Searchable, Tab
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// Searchable implementation // Searchable implementation
@@ -135,9 +136,6 @@ struct MediaLibrary: Screen<NC::Window *>, HasColumns, HasSongs, Searchable, Tab
NC::Menu<AlbumEntry> Albums; NC::Menu<AlbumEntry> Albums;
NC::Menu<MPD::Song> Songs; NC::Menu<MPD::Song> Songs;
protected:
virtual bool isLockable() OVERRIDE { return true; }
private: private:
void AddToPlaylist(bool); void AddToPlaylist(bool);

View File

@@ -47,13 +47,11 @@ struct Outputs: Screen<NC::Menu<MPD::Output>>, Tabbable
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// private members // private members
void FetchList(); void FetchList();
protected:
virtual bool isLockable() OVERRIDE { return true; }
}; };
extern Outputs *myOutputs; extern Outputs *myOutputs;

View File

@@ -46,6 +46,7 @@ struct Playlist: Screen<NC::Menu<MPD::Song>>, HasSongs, Searchable, Tabbable
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// Searchable implementation // Searchable implementation
@@ -77,9 +78,6 @@ struct Playlist: Screen<NC::Menu<MPD::Song>>, HasSongs, Searchable, Tabbable
void reloadTotalLength() { m_reload_total_length = true; } void reloadTotalLength() { m_reload_total_length = true; }
void reloadRemaining() { m_reload_remaining = true; } void reloadRemaining() { m_reload_remaining = true; }
protected:
virtual bool isLockable() OVERRIDE { return true; }
private: private:
std::string getTotalLength(); std::string getTotalLength();

View File

@@ -46,6 +46,7 @@ struct PlaylistEditor: Screen<NC::Window *>, HasColumns, HasSongs, Searchable, T
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// Searchable implementation // Searchable implementation
@@ -80,9 +81,6 @@ struct PlaylistEditor: Screen<NC::Window *>, HasColumns, HasSongs, Searchable, T
NC::Menu<MPD::Playlist> Playlists; NC::Menu<MPD::Playlist> Playlists;
NC::Menu<MPD::Song> Content; NC::Menu<MPD::Song> Content;
protected:
virtual bool isLockable() OVERRIDE { return true; }
private: private:
void AddToPlaylist(bool); void AddToPlaylist(bool);

View File

@@ -98,8 +98,7 @@ void BaseScreen::getWindowResizeParams(size_t &x_offset, size_t &width, bool adj
bool BaseScreen::lock() bool BaseScreen::lock()
{ {
if (myLockedScreen) assert(myLockedScreen == nullptr);
return false;
if (isLockable()) if (isLockable())
{ {
myLockedScreen = this; myLockedScreen = this;

View File

@@ -80,6 +80,12 @@ struct BaseScreen
/// @see Screen::mouseButtonPressed() /// @see Screen::mouseButtonPressed()
virtual void mouseButtonPressed(MEVENT me) = 0; virtual void mouseButtonPressed(MEVENT me) = 0;
/// @return true if screen can be locked. Note that returning
/// false here doesn't neccesarily mean that screen is also not
/// mergable (eg. lyrics screen is not lockable since that wouldn't
/// make much sense, but it's perfectly fine to merge it).
virtual bool isLockable() = 0;
/// @return true if screen is mergable, ie. can be "proper" subwindow /// @return true if screen is mergable, ie. can be "proper" subwindow
/// if one of the screens is locked. Screens that somehow resemble popups /// if one of the screens is locked. Screens that somehow resemble popups
@@ -98,12 +104,6 @@ struct BaseScreen
static void unlock(); static void unlock();
protected: protected:
/// @return true if screen can be locked. Note that returning
/// false here doesn't neccesarily mean that screen is also not
/// mergable (eg. lyrics screen is not lockable since that wouldn't
/// make much sense, but it's perfectly fine to merge it).
virtual bool isLockable() = 0;
/// Gets X offset and width of current screen to be used eg. in resize() function. /// Gets X offset and width of current screen to be used eg. in resize() function.
/// @param adjust_locked_screen indicates whether this function should /// @param adjust_locked_screen indicates whether this function should
/// automatically adjust locked screen's dimensions (if there is one set) /// automatically adjust locked screen's dimensions (if there is one set)

View File

@@ -91,6 +91,7 @@ struct SearchEngine: Screen<NC::Menu<SEItem>>, HasSongs, Searchable, Tabbable
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// Searchable implementation // Searchable implementation
@@ -113,9 +114,6 @@ struct SearchEngine: Screen<NC::Menu<SEItem>>, HasSongs, Searchable, Tabbable
static size_t SearchButton; static size_t SearchButton;
static size_t ResetButton; static size_t ResetButton;
protected:
virtual bool isLockable() OVERRIDE { return true; }
private: private:
void Prepare(); void Prepare();
void Search(); void Search();

View File

@@ -47,10 +47,8 @@ struct SelectedItemsAdder: Screen<NC::Menu<RunnableItem<std::string, void()>> *>
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isMergable() OVERRIDE { return false; }
protected:
virtual bool isLockable() OVERRIDE { return false; } virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return false; }
private: private:
void populatePlaylistSelector(BaseScreen *screen); void populatePlaylistSelector(BaseScreen *screen);

View File

@@ -42,10 +42,8 @@ struct ServerInfo: Screen<NC::Scrollpad>, Tabbable
virtual void enterPressed() OVERRIDE { } virtual void enterPressed() OVERRIDE { }
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual bool isMergable() OVERRIDE { return false; }
protected:
virtual bool isLockable() OVERRIDE { return false; } virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return false; }
private: private:
void SetDimensions(); void SetDimensions();

View File

@@ -48,14 +48,12 @@ struct SongInfo: Screen<NC::Scrollpad>, Tabbable
virtual void enterPressed() OVERRIDE { } virtual void enterPressed() OVERRIDE { }
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// private members // private members
static const Metadata Tags[]; static const Metadata Tags[];
protected:
virtual bool isLockable() OVERRIDE { return false; }
private: private:
void PrepareSong(MPD::Song &); void PrepareSong(MPD::Song &);
}; };

View File

@@ -45,15 +45,13 @@ struct SortPlaylistDialog
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return false; } virtual bool isMergable() OVERRIDE { return false; }
// private members // private members
void moveSortOrderUp(); void moveSortOrderUp();
void moveSortOrderDown(); void moveSortOrderDown();
protected:
virtual bool isLockable() OVERRIDE { return false; }
private: private:
void moveSortOrderHint() const; void moveSortOrderHint() const;
void sort() const; void sort() const;

View File

@@ -49,6 +49,7 @@ struct TagEditor: Screen<NC::Window *>, HasColumns, HasSongs, Searchable, Tabbab
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual void mouseButtonPressed(MEVENT) OVERRIDE; virtual void mouseButtonPressed(MEVENT) OVERRIDE;
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// Searchable implementation // Searchable implementation
@@ -79,9 +80,6 @@ struct TagEditor: Screen<NC::Window *>, HasColumns, HasSongs, Searchable, Tabbab
NC::Menu<std::string> *TagTypes; NC::Menu<std::string> *TagTypes;
NC::Menu<MPD::MutableSong> *Tags; NC::Menu<MPD::MutableSong> *Tags;
protected:
virtual bool isLockable() OVERRIDE { return true; }
private: private:
void SetDimensions(size_t, size_t); void SetDimensions(size_t, size_t);

View File

@@ -46,14 +46,12 @@ struct TinyTagEditor: Screen<NC::Menu<NC::Buffer>>
virtual void spacePressed() OVERRIDE { } virtual void spacePressed() OVERRIDE { }
virtual void mouseButtonPressed(MEVENT me) OVERRIDE; virtual void mouseButtonPressed(MEVENT me) OVERRIDE;
virtual bool isLockable() OVERRIDE { return false; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// private members // private members
void SetEdited(const MPD::Song &); void SetEdited(const MPD::Song &);
protected:
virtual bool isLockable() OVERRIDE { return false; }
private: private:
bool getTags(); bool getTags();
MPD::MutableSong itsEdited; MPD::MutableSong itsEdited;

View File

@@ -53,6 +53,7 @@ struct Visualizer: Screen<NC::Window>, Tabbable
virtual void spacePressed() OVERRIDE; virtual void spacePressed() OVERRIDE;
virtual void mouseButtonPressed(MEVENT) OVERRIDE { } virtual void mouseButtonPressed(MEVENT) OVERRIDE { }
virtual bool isLockable() OVERRIDE { return true; }
virtual bool isMergable() OVERRIDE { return true; } virtual bool isMergable() OVERRIDE { return true; }
// private members // private members
@@ -60,9 +61,6 @@ struct Visualizer: Screen<NC::Window>, Tabbable
void ResetFD(); void ResetFD();
void FindOutputID(); void FindOutputID();
protected:
virtual bool isLockable() OVERRIDE { return true; }
private: private:
void DrawSoundWave(int16_t *, ssize_t, size_t, size_t); void DrawSoundWave(int16_t *, ssize_t, size_t, size_t);
void DrawSoundWaveStereo(int16_t *, int16_t *, ssize_t, size_t); void DrawSoundWaveStereo(int16_t *, int16_t *, ssize_t, size_t);