[gnote] Update readonly addin for popover
- From: Aurimas Černius <aurimasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnote] Update readonly addin for popover
- Date: Fri, 8 Jan 2016 21:48:21 +0000 (UTC)
commit ee2cf90fc8047b02a0efc2895ce00b7f04c1da7a
Author: Aurimas Černius <aurisc4 gmail com>
Date: Fri Jan 8 23:46:53 2016 +0200
Update readonly addin for popover
src/addins/readonly/readonly.desktop.in.in | 3 +
src/addins/readonly/readonlynoteaddin.cpp | 71 ++++++++++++----------------
src/addins/readonly/readonlynoteaddin.hpp | 9 ++-
3 files changed, 39 insertions(+), 44 deletions(-)
---
diff --git a/src/addins/readonly/readonly.desktop.in.in b/src/addins/readonly/readonly.desktop.in.in
index 9ad2e63..40ebc43 100644
--- a/src/addins/readonly/readonly.desktop.in.in
+++ b/src/addins/readonly/readonly.desktop.in.in
@@ -9,3 +9,6 @@ DefaultEnabled=false
Module=readonly
LibgnoteRelease= LIBGNOTE_RELEASE@
LibgnoteVersionInfo= LIBGNOTE_VERSION_INFO@
+[Actions]
+actions_bool=readonly-toggle
+non_modifying_actions=readonly-toggle
diff --git a/src/addins/readonly/readonlynoteaddin.cpp b/src/addins/readonly/readonlynoteaddin.cpp
index 00b28d7..5a9d81f 100644
--- a/src/addins/readonly/readonlynoteaddin.cpp
+++ b/src/addins/readonly/readonlynoteaddin.cpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2013 Aurimas Cernius
+ * Copyright (C) 2013,2016 Aurimas Cernius
* Copyright (C) 2010 Debarshi Ray
*
* This program is free software: you can redistribute it and/or modify
@@ -20,6 +20,7 @@
#include <glibmm/i18n.h>
+#include "debug.hpp"
#include "iactionmanager.hpp"
#include "itagmanager.hpp"
#include "notewindow.hpp"
@@ -27,36 +28,6 @@
#include "tag.hpp"
-namespace {
- class ReadOnlyAction
- : public gnote::utils::CheckAction
- , public gnote::NoteWindow::NonModifyingNoteAction
- {
- public:
- typedef Glib::RefPtr<ReadOnlyAction> Ptr;
- static Ptr create()
- {
- return Ptr(new ReadOnlyAction);
- }
- virtual void reference() const override
- {
- gnote::utils::CheckAction::reference();
- }
- virtual void unreference() const override
- {
- gnote::utils::CheckAction::unreference();
- }
- private:
- ReadOnlyAction()
- : gnote::utils::CheckAction("ReadOnlyAction")
- {
- set_label(_("Read Only"));
- set_tooltip(_("Make this note read-only"));
- }
- };
-}
-
-
namespace readonly {
DECLARE_MODULE(ReadOnlyModule);
@@ -88,24 +59,42 @@ void ReadOnlyNoteAddin::shutdown()
void ReadOnlyNoteAddin::on_note_opened()
{
- m_action = ReadOnlyAction::create();
- add_note_action(m_action, gnote::READ_ONLY_ORDER);
- m_action->signal_activate().connect(
- sigc::mem_fun(*this, &ReadOnlyNoteAddin::on_menu_item_toggled));
+ get_window()->signal_foregrounded.connect(sigc::mem_fun(*this, &ReadOnlyNoteAddin::on_foreground));
+ get_window()->signal_backgrounded.connect(sigc::mem_fun(*this, &ReadOnlyNoteAddin::on_background));
+}
+
+std::map<int, Gtk::Widget*> ReadOnlyNoteAddin::get_actions_popover_widgets() const
+{
+ auto widgets = NoteAddin::get_actions_popover_widgets();
+ auto button = gnote::utils::create_popover_button("win.readonly-toggle", _("Read Only"));
+ gnote::utils::add_item_to_ordered_map(widgets, gnote::READ_ONLY_ORDER, button);
+ return widgets;
+}
+void ReadOnlyNoteAddin::on_foreground()
+{
+ auto action = get_window()->host()->find_action("readonly-toggle");
gnote::ITagManager & m = gnote::ITagManager::obj();
const gnote::Tag::Ptr ro_tag = m.get_or_create_system_tag("read-only");
- if(get_note()->contains_tag(ro_tag)) {
- ReadOnlyAction::Ptr::cast_dynamic(m_action)->checked(true);
- on_menu_item_toggled();
- }
+
+ m_readonly_toggle_cid = action->signal_change_state()
+ .connect(sigc::mem_fun(*this, &ReadOnlyNoteAddin::on_menu_item_toggled));
+ action->change_state(Glib::Variant<bool>::create(get_note()->contains_tag(ro_tag)));
+}
+
+void ReadOnlyNoteAddin::on_background()
+{
+ m_readonly_toggle_cid.disconnect();
}
-void ReadOnlyNoteAddin::on_menu_item_toggled()
+void ReadOnlyNoteAddin::on_menu_item_toggled(const Glib::VariantBase & state)
{
gnote::ITagManager & m = gnote::ITagManager::obj();
const gnote::Tag::Ptr ro_tag = m.get_or_create_system_tag("read-only");
- if(ReadOnlyAction::Ptr::cast_dynamic(m_action)->checked()) {
+ bool read_only = Glib::VariantBase::cast_dynamic<Glib::Variant<bool>>(state).get();
+ auto action = get_window()->host()->find_action("readonly-toggle");
+ action->set_state(state);
+ if(read_only) {
get_note()->enabled(false);
get_note()->add_tag(ro_tag);
}
diff --git a/src/addins/readonly/readonlynoteaddin.hpp b/src/addins/readonly/readonlynoteaddin.hpp
index e346004..27615d2 100644
--- a/src/addins/readonly/readonlynoteaddin.hpp
+++ b/src/addins/readonly/readonlynoteaddin.hpp
@@ -1,7 +1,7 @@
/*
* gnote
*
- * Copyright (C) 2013 Aurimas Cernius
+ * Copyright (C) 2013,2016 Aurimas Cernius
* Copyright (C) 2010 Debarshi Ray
*
* This program is free software: you can redistribute it and/or modify
@@ -47,11 +47,14 @@ public:
virtual void initialize() override;
virtual void shutdown() override;
virtual void on_note_opened() override;
+ virtual std::map<int, Gtk::Widget*> get_actions_popover_widgets() const override;
private:
ReadOnlyNoteAddin();
- void on_menu_item_toggled();
+ void on_menu_item_toggled(const Glib::VariantBase & state);
+ void on_foreground();
+ void on_background();
- Glib::RefPtr<Gtk::Action> m_action;
+ sigc::connection m_readonly_toggle_cid;
};
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]