[gnote] Migrate to Gtk::Application



commit 50d0687e5d44ca24bfa38c55f72ffdeb1e166115
Author: Aurimas Äernius <aurisc4 gmail com>
Date:   Sat Jun 23 15:30:06 2012 +0300

    Migrate to Gtk::Application
    
    Drop use of deprecated Gtk::Main.
    Replace use of GtkApplication by Gtk::Application.

 src/gnote.cpp         |   95 ++++++++++--------------------------------------
 src/gnote.hpp         |   26 +++++++++----
 src/main.cpp          |   12 ++-----
 src/note.cpp          |    4 +-
 src/recentchanges.cpp |    4 +-
 5 files changed, 45 insertions(+), 96 deletions(-)
---
diff --git a/src/gnote.cpp b/src/gnote.cpp
index 483e0f1..c92af28 100644
--- a/src/gnote.cpp
+++ b/src/gnote.cpp
@@ -56,58 +56,14 @@
 
 namespace gnote {
 
-  namespace {
-
-    typedef GtkApplicationClass GnoteAppClass;
-
-    G_DEFINE_TYPE(GnoteApp, gnote_app, GTK_TYPE_APPLICATION)
-
-    static void gnote_app_init(GnoteApp *)
-    {}
-
-    static void gnote_app_activate(GApplication *)
-    {
-      Gnote::obj().open_search_all();
-    }
-
-    static void gnote_app_startup(GApplication * application)
-    {
-      G_APPLICATION_CLASS(gnote_app_parent_class)->startup(application);
-      Gnote::obj().startup();
-    }
-
-    static int gnote_app_command_line(GApplication *, GApplicationCommandLine * command_line)
-    {
-      int argc;
-      char **argv = g_application_command_line_get_arguments(command_line, &argc);
-      return Gnote::obj().command_line(argc, argv);
-    }
-
-    static void gnote_app_class_init(GnoteAppClass * klass)
-    {
-      G_APPLICATION_CLASS(klass)->activate = gnote_app_activate;
-      G_APPLICATION_CLASS(klass)->startup = gnote_app_startup;
-      G_APPLICATION_CLASS(klass)->command_line = gnote_app_command_line;
-    }
-
-    GnoteApp * gnote_app_new()
-    {
-      g_type_init();
-      return static_cast<GnoteApp*>(g_object_new(gnote_app_get_type(),
-                                                 "application-id", "org.gnome.Gnote",
-                                                 "flags", G_APPLICATION_HANDLES_COMMAND_LINE,
-                                                 NULL));
-    }
-
-}
-
+  Gnote *Gnote::s_obj = NULL;
 
   Gnote::Gnote()
-    : m_manager(NULL)
+    : Gtk::Application("org.gnome.Gnote", Gio::APPLICATION_HANDLES_COMMAND_LINE)
+    , m_manager(NULL)
     , m_keybinder(NULL)
     , m_is_background(false)
     , m_prefsdlg(NULL)
-    , m_app(NULL)
   {
   }
 
@@ -135,24 +91,33 @@ namespace gnote {
       return 0;
     }
 
-    m_app = gnote_app_new();
-    g_application_run(G_APPLICATION(m_app), argc, argv);
-    g_object_unref(m_app);
-    m_app = NULL;
+    int retval = run(argc, argv);
     signal_quit();
-    return 0;
+    return retval;
   }
 
 
-  void Gnote::startup()
+  void Gnote::on_startup()
   {
+    Gtk::Application::on_startup();
     m_icon_theme = Gtk::IconTheme::get_default();
     m_icon_theme->append_search_path(DATADIR"/icons");
     m_icon_theme->append_search_path(DATADIR"/gnote/icons");
   }
 
 
-  int Gnote::command_line(int argc, char **argv) {
+  void Gnote::on_activate()
+  {
+    Gtk::Application::on_activate();
+    open_search_all();
+  }
+
+
+  int Gnote::on_command_line(const Glib::RefPtr<Gio::ApplicationCommandLine> & command_line)
+  {
+    Gtk::Application::on_command_line(command_line);
+    int argc = 0;
+    char **argv = command_line->get_arguments(argc);
     cmd_line.parse(argc, argv);
     if(!m_manager) {
       common_init();
@@ -348,11 +313,7 @@ namespace gnote {
 
   void Gnote::on_quit_gnote_action()
   {
-#ifdef HAVE_GLIB_2_32
-    g_application_quit(G_APPLICATION(m_app));
-#else
-    Gtk::Main::quit();
-#endif
+    quit();
   }
 
   void Gnote::on_preferences_response(int /*res*/)
@@ -459,22 +420,6 @@ namespace gnote {
   }
 
 
-  void Gnote::add_window(Gtk::Window * window)
-  {
-    if(m_app) {
-      gtk_application_add_window(GTK_APPLICATION(m_app), GTK_WINDOW(window->gobj()));
-    }
-  }
-
-
-  void Gnote::remove_window(Gtk::Window * window)
-  {
-    if(m_app) {
-      gtk_application_remove_window(GTK_APPLICATION(m_app), GTK_WINDOW(window->gobj()));
-    }
-  }
-
-
   std::string Gnote::cache_dir()
   {
     return Glib::get_user_cache_dir() + "/gnote";
diff --git a/src/gnote.hpp b/src/gnote.hpp
index 459be3d..69159bc 100644
--- a/src/gnote.hpp
+++ b/src/gnote.hpp
@@ -40,7 +40,6 @@
 
 namespace gnote {
 
-typedef GtkApplication GnoteApp;
 class PreferencesDialog;
 class NoteManager;
 class RemoteControlClient;
@@ -99,14 +98,21 @@ private:
 
 
 class Gnote
-  : public base::Singleton<Gnote>
+  : public Gtk::Application
 {
 public:
-  Gnote();
+  static Gnote& obj()
+    {
+      return *s_obj;
+    }
+  static Glib::RefPtr<Gnote> create()
+    {
+      s_obj = new Gnote;
+      return Glib::RefPtr<Gnote>(s_obj);
+    }
+
   ~Gnote();
   int main(int argc, char **argv);
-  void startup();
-  int command_line(int argc, char **argv);
   NoteManager & default_note_manager()
     {
       return *m_manager;
@@ -127,8 +133,6 @@ public:
   void on_show_about_action();
   void open_search_all();
   void open_note_sync_window();
-  void add_window(Gtk::Window * window);
-  void remove_window(Gtk::Window * window);
 
   static std::string cache_dir();
   static std::string conf_dir();
@@ -158,7 +162,14 @@ public:
     {
       return m_sync_dlg;
     }
+protected:
+  virtual void on_activate();
+  virtual int on_command_line(const Glib::RefPtr<Gio::ApplicationCommandLine> & command_line);
+  virtual void on_startup();
 private:
+  static Gnote *s_obj;
+
+  Gnote();
   void start_note_created(const Note::Ptr & start_note);
   std::string get_note_path(const std::string & override_path);
   void on_setting_changed(const Glib::ustring & key);
@@ -174,7 +185,6 @@ private:
   bool m_is_background;
   PreferencesDialog *m_prefsdlg;
   GnoteCommandLine cmd_line;
-  GnoteApp *m_app;
   sync::SyncDialog::Ptr m_sync_dlg;
 };
 
diff --git a/src/main.cpp b/src/main.cpp
index e9ec7eb..ad0354d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -27,10 +27,6 @@
 
 int main(int argc, char **argv)
 {
-//  if(!Glib::thread_supported()) {
-//    Glib::thread_init();
-//  }
-
   bindtextdomain(GETTEXT_PACKAGE, GNOTE_LOCALEDIR);
   bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
   textdomain(GETTEXT_PACKAGE);
@@ -39,9 +35,7 @@ int main(int argc, char **argv)
     g_thread_init(NULL);
   }
   gdk_threads_init();
-  Gtk::Main kit(argc, argv);
-  gnote::Gnote *app = &gnote::Gnote::obj();
-  int retval = app->main(argc, argv);
-  delete app;
-  return retval;
+
+  Glib::RefPtr<gnote::Gnote> app = gnote::Gnote::create();
+  return app->main(argc, argv);
 }
diff --git a/src/note.cpp b/src/note.cpp
index 113d28c..ef4daec 100644
--- a/src/note.cpp
+++ b/src/note.cpp
@@ -1054,13 +1054,13 @@ namespace gnote {
 
   void Note::on_window_show()
   {
-    Gnote::obj().add_window(m_window);
+    Gnote::obj().add_window(*m_window);
   }
 
 
   void Note::on_window_hide()
   {
-    Gnote::obj().remove_window(m_window);
+    Gnote::obj().remove_window(*m_window);
   }
 
 
diff --git a/src/recentchanges.cpp b/src/recentchanges.cpp
index 136ae11..4389918 100644
--- a/src/recentchanges.cpp
+++ b/src/recentchanges.cpp
@@ -102,7 +102,7 @@ namespace gnote {
     , m_entry_changed_timeout(NULL)
     , m_clickX(0), m_clickY(0)
   {
-    Gnote::obj().add_window(this);
+    Gnote::obj().add_window(*this);
     _init_static();
 //    get_window()->set_icon_name("gnote");
     set_default_size(450,400);
@@ -239,7 +239,7 @@ namespace gnote {
 
   NoteRecentChanges::~NoteRecentChanges()
   {
-    Gnote::obj().remove_window(this);
+    Gnote::obj().remove_window(*this);
   }
 
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]