[california/wip/732029-gtk-312] First stab moving dialogs into GtkPopover



commit 3e899049b9ab5bb34fa5c42022bc6d81468500bd
Author: Jim Nelson <jim yorba org>
Date:   Mon Jun 23 15:33:49 2014 -0700

    First stab moving dialogs into GtkPopover
    
    Some fine-tuning of panel layout definitely needs to happen.

 configure.ac                                |    2 +-
 debian/control                              |    2 +-
 src/activator/activator-window.vala         |   21 ++-----------
 src/application/california-application.vala |    4 +-
 src/host/host-main-window.vala              |   20 ++++++------
 src/manager/manager-window.vala             |   21 ++-----------
 src/toolkit/toolkit-deck-window.vala        |   41 +++++++++-----------------
 7 files changed, 36 insertions(+), 75 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index d307d82..98816aa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,7 +25,7 @@ AC_SUBST(CPPFLAGS)
 AC_SUBST(LDFLAGS)
 
 GLIB_REQUIRED=2.38.0
-GTK_REQUIRED=3.10.7
+GTK_REQUIRED=3.12.3
 GEE_REQUIRED=0.10.5
 ECAL_REQUIRED=3.8.5
 LIBSOUP_REQUIRED=2.44
diff --git a/debian/control b/debian/control
index 9a10333..dbd7af0 100644
--- a/debian/control
+++ b/debian/control
@@ -5,7 +5,7 @@ Maintainer: Jim Nelson <jim yorba org>
 Build-Depends: debhelper (>= 8),
  libgee-0.8-dev (>= 0.10.5),
  libglib2.0-dev (>= 2.38.0),
- libgtk-3-dev (>= 3.10.7),
+ libgtk-3-dev (>= 3.12.3),
  valac-0.22 (>= 0.21.1),
  intltool,
  libecal1.2-dev (>= 3.8.5),
diff --git a/src/activator/activator-window.vala b/src/activator/activator-window.vala
index bdce01a..25158b6 100644
--- a/src/activator/activator-window.vala
+++ b/src/activator/activator-window.vala
@@ -11,10 +11,8 @@ namespace California.Activator {
  */
 
 public class Window : Toolkit.DeckWindow {
-    private static Activator.Window? instance = null;
-    
-    private Window(Gtk.Window? parent) {
-        base (parent, null);
+    private Window(Gtk.Widget relative_to, Gdk.Point? for_location) {
+        base (relative_to, for_location, null);
         
         // The Deck is pre-populated with each of their Cards, with the InstanceList jumping to
         // the right set when asked to (and acting as home)
@@ -26,20 +24,9 @@ public class Window : Toolkit.DeckWindow {
         deck.add_cards(cards);
     }
     
-    public static void display(Gtk.Window? parent) {
-        // only allow one instance at a time
-        if (instance != null) {
-            instance.present_with_time(Gdk.CURRENT_TIME);
-            
-            return;
-        }
-        
-        instance = new Activator.Window(parent);
+    public static void display(Gtk.Widget relative_to, Gdk.Point? for_location) {
+        Activator.Window instance = new Activator.Window(relative_to, for_location);
         instance.show_all();
-        instance.run();
-        instance.destroy();
-        
-        instance = null;
     }
 }
 
diff --git a/src/application/california-application.vala b/src/application/california-application.vala
index 49dfe8a..ace3720 100644
--- a/src/application/california-application.vala
+++ b/src/application/california-application.vala
@@ -211,11 +211,11 @@ public class Application : Gtk.Application {
     }
     
     private void on_new_calendar() {
-        Activator.Window.display(main_window);
+        Activator.Window.display(main_window.calendar_button, null);
     }
     
     private void on_calendar_manager() {
-        Manager.Window.display(main_window);
+        Manager.Window.display(main_window.calendar_button, null);
     }
     
     private void on_process_file(SimpleAction action, Variant? variant) {
diff --git a/src/host/host-main-window.vala b/src/host/host-main-window.vala
index d1c0874..1e4dafd 100644
--- a/src/host/host-main-window.vala
+++ b/src/host/host-main-window.vala
@@ -83,6 +83,8 @@ public class MainWindow : Gtk.ApplicationWindow {
         { ACTION_RESET_FONT, on_reset_font }
     };
     
+    public Gtk.Button calendar_button { get; private set; }
+    
     private Gtk.Button quick_add_button;
     private View.Palette palette;
     private View.Controllable month_view;
@@ -195,11 +197,11 @@ public class MainWindow : Gtk.ApplicationWindow {
         quick_add_button.tooltip_text = _("Quick add event (Ctrl+N)");
         quick_add_button.set_action_name(DETAILED_ACTION_QUICK_CREATE_EVENT);
         
-        Gtk.Button calendars = new Gtk.Button.from_icon_name("x-office-calendar-symbolic",
+        calendar_button = new Gtk.Button.from_icon_name("x-office-calendar-symbolic",
             Gtk.IconSize.MENU);
-        calendars.valign = Gtk.Align.CENTER;
-        calendars.tooltip_text = _("Calendars (Ctrl+L)");
-        calendars.set_action_name(Application.DETAILED_ACTION_CALENDAR_MANAGER);
+        calendar_button.valign = Gtk.Align.CENTER;
+        calendar_button.tooltip_text = _("Calendars (Ctrl+L)");
+        calendar_button.set_action_name(Application.DETAILED_ACTION_CALENDAR_MANAGER);
         
         Gtk.MenuButton window_menu = new Gtk.MenuButton();
         window_menu.valign = Gtk.Align.CENTER;
@@ -214,14 +216,14 @@ public class MainWindow : Gtk.ApplicationWindow {
         size.add_widget(prev);
         size.add_widget(next);
         size.add_widget(quick_add_button);
-        size.add_widget(calendars);
+        size.add_widget(calendar_button);
         size.add_widget(window_menu);
         
         // pack right-side of window ... note that this was fixed in 3.12, reversing the order of
         // how widgets need to be packed at the end
 #if GTK_312
         headerbar.pack_end(window_menu);
-        headerbar.pack_end(calendars);
+        headerbar.pack_end(calendar_button);
         headerbar.pack_end(quick_add_button);
 #else
         headerbar.pack_end(quick_add_button);
@@ -339,11 +341,11 @@ public class MainWindow : Gtk.ApplicationWindow {
     }
     
     private void show_deck(Gtk.Widget relative_to, Gdk.Point? for_location, Toolkit.Deck deck) {
-        Toolkit.DeckWindow deck_window = new Toolkit.DeckWindow(this, deck);
+        Toolkit.DeckWindow deck_window = new Toolkit.DeckWindow(relative_to, for_location, deck);
         
         // when the dialog closes, reset View.Controllable state (selection is maintained while
         // use is viewing/editing interaction) and destroy widgets
-        deck_window.deck.dismiss.connect(() => {
+        deck_window.dismiss.connect(() => {
             current_controller.unselect_all();
             deck_window.hide();
             // give the dialog a change to hide before allowing other signals to fire, which may
@@ -352,8 +354,6 @@ public class MainWindow : Gtk.ApplicationWindow {
         });
         
         deck_window.show_all();
-        deck_window.run();
-        deck_window.destroy();
     }
     
     private void on_quick_create_event() {
diff --git a/src/manager/manager-window.vala b/src/manager/manager-window.vala
index 64bf98c..4c1a440 100644
--- a/src/manager/manager-window.vala
+++ b/src/manager/manager-window.vala
@@ -11,30 +11,17 @@ namespace California.Manager {
  */
 
 public class Window : Toolkit.DeckWindow {
-    private static Manager.Window? instance = null;
-    
     private CalendarList calendar_list = new CalendarList();
     
-    private Window(Gtk.Window? parent) {
-        base (parent, null);
+    private Window(Gtk.Widget relative_to, Gdk.Point? for_location) {
+        base (relative_to, for_location, null);
         
         deck.add_cards(iterate<Toolkit.Card>(calendar_list).to_array_list());
     }
     
-    public static void display(Gtk.Window? parent) {
-        // only allow one instance at a time
-        if (instance != null) {
-            instance.present_with_time(Gdk.CURRENT_TIME);
-            
-            return;
-        }
-        
-        instance = new Manager.Window(parent);
+    public static void display(Gtk.Widget relative_to, Gdk.Point? for_location) {
+        Manager.Window instance = new Manager.Window(relative_to, for_location);
         instance.show_all();
-        instance.run();
-        instance.destroy();
-        
-        instance = null;
     }
     
     public override bool key_release_event(Gdk.EventKey event) {
diff --git a/src/toolkit/toolkit-deck-window.vala b/src/toolkit/toolkit-deck-window.vala
index 44d1872..5afbe22 100644
--- a/src/toolkit/toolkit-deck-window.vala
+++ b/src/toolkit/toolkit-deck-window.vala
@@ -16,48 +16,35 @@ namespace California.Toolkit {
  * interactions.
  */
 
-public class DeckWindow : Gtk.Dialog {
+public class DeckWindow : Gtk.Popover {
     public Deck deck { get; private set; }
     
-    public DeckWindow(Gtk.Window? parent, Deck? starter_deck) {
+    public signal void dismiss(bool user_request, bool final);
+    
+    public DeckWindow(Gtk.Widget rel_to, Gdk.Point? for_location, Deck? starter_deck) {
+        Object (relative_to: rel_to);
+        
         this.deck = starter_deck ?? new Deck();
         
-        transient_for = parent;
-        modal = true;
-        resizable = false;
+        if (for_location != null) {
+            Gdk.Rectangle for_location_rect = Gdk.Rectangle() { x = for_location.x, y = for_location.y,
+                width = 1, height = 1 };
+            pointing_to = for_location_rect;
+        }
         
         deck.dismiss.connect(on_deck_dismissed);
-        deck.success.connect(on_deck_success);
-        deck.failure.connect(on_deck_failure);
         
-        Gtk.Box content_area = (Gtk.Box) get_content_area();
-        content_area.margin = 8;
-        content_area.add(deck);
-        
-        get_action_area().visible = false;
-        get_action_area().no_show_all = true;
+        add(deck);
     }
     
     ~DeckWindow() {
         deck.dismiss.disconnect(on_deck_dismissed);
-        deck.success.disconnect(on_deck_success);
-        deck.failure.disconnect(on_deck_failure);
     }
     
     private void on_deck_dismissed(bool user_request, bool final) {
+        dismiss(user_request, final);
         if (final)
-            response(Gtk.ResponseType.CLOSE);
-    }
-    
-    private void on_deck_success() {
-        response(Gtk.ResponseType.OK);
-    }
-    
-    private void on_deck_failure(string? user_message) {
-        if (!String.is_empty(user_message))
-            Application.instance.error_message(user_message);
-        
-        response(Gtk.ResponseType.CLOSE);
+            destroy();
     }
 }
 


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