Blob Blame History Raw
From a83257bcf791e237afb55ed37f04d776f0fd927b Mon Sep 17 00:00:00 2001
From: Rahul Bothra <f2016015@pilani.bits-pilani.ac.in>
Date: Tue, 24 Jul 2018 17:39:06 +0530
Subject: [PATCH] Embed popwindow code in activitychooser

Signed-off-by: James Cameron <quozl@laptop.org>
---
 po/POTFILES.in                        |  1 +
 src/jarabe/desktop/activitychooser.py | 87 +++++++++++++++++++++++----
 src/jarabe/journal/journalactivity.py | 13 +++-
 3 files changed, 88 insertions(+), 13 deletions(-)

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 6c14f2f17..54a306c2e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -44,6 +44,7 @@ src/jarabe/controlpanel/cmd.py
 src/jarabe/controlpanel/gui.py
 src/jarabe/controlpanel/sectionview.py
 src/jarabe/controlpanel/toolbar.py
+src/jarabe/desktop/activitychooser.py
 src/jarabe/desktop/activitieslist.py
 src/jarabe/desktop/favoriteslayout.py
 src/jarabe/desktop/favoritesview.py
diff --git a/src/jarabe/desktop/activitychooser.py b/src/jarabe/desktop/activitychooser.py
index b585cdea4..cfb30da0f 100644
--- a/src/jarabe/desktop/activitychooser.py
+++ b/src/jarabe/desktop/activitychooser.py
@@ -16,23 +16,50 @@
 
 import logging
 
-from gi.repository import GObject
 from gi.repository import GLib
+from gettext import gettext as _
 from gi.repository import Gtk
 from gi.repository import Gdk
+from gi.repository import GObject
 
-from sugar3.graphics import style
-from sugar3.graphics.popwindow import PopWindow
 from sugar3.activity import activityfactory
 from sugar3.graphics import iconentry
+from sugar3.graphics import style
+from sugar3.graphics.toolbutton import ToolButton
 
+from jarabe.model import shell
 from jarabe.desktop.activitieslist import ActivitiesList
 from jarabe.util.normalize import normalize_string
 
+
+class TitleBox(Gtk.Toolbar):
+    def __init__(self):
+        Gtk.Toolbar.__init__(self)
+
+        self.close_button = ToolButton(icon_name='dialog-cancel')
+        self.close_button.set_tooltip(_('Close'))
+        self.insert(self.close_button, -1)
+        self.close_button.show()
+
+        self._label = Gtk.Label()
+        self._label.set_alignment(0, 0.5)
+
+        tool_item = Gtk.ToolItem()
+        tool_item.set_expand(True)
+        tool_item.add(self._label)
+        self._label.show()
+        self.insert(tool_item, 0)
+        tool_item.show()
+
+    def set_title(self, title):
+        self._label.set_markup('<b>%s</b>' % title)
+        self._label.show()
+
+
 _AUTOSEARCH_TIMEOUT = 1000
 
 
-class ActivityChooser(PopWindow):
+class ActivityChooser(Gtk.Window):
 
     __gtype_name__ = 'ActivityChooser'
 
@@ -43,16 +70,37 @@ class ActivityChooser(PopWindow):
     }
 
     def __init__(self):
-        logging.debug('In the Object Chooser class init hehehe')
-        PopWindow.__init__(self)
-        width, height = self.HALF_WIDTH
-
-        self.set_size((width*3/2, height*2/3))
+        Gtk.Window.__init__(self)
+
+        self.set_decorated(False)
+        self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
+        self.set_border_width(style.LINE_WIDTH)
+        self.set_resizable(False)
+        self.set_modal(True)
+        self.set_can_focus(True)
+
+        self._vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+        self.add(self._vbox)
+        self._vbox.show()
+
+        self._title_box = TitleBox()
+        self._title_box.close_button.connect(
+            'clicked',
+            self.__close_button_clicked_cb)
+        self._title_box.set_size_request(-1, style.GRID_CELL_SIZE)
+
+        self._vbox.pack_start(self._title_box, False, True, 0)
+        self._title_box.show()
+
+        self.set_size_request((Gdk.Screen.height() - style.GRID_CELL_SIZE * 3)*3/4,
+                  (Gdk.Screen.height() - style.GRID_CELL_SIZE * 2)*2/3)
         self.connect('key-press-event', self.__key_press_event_cb)
+        self.connect('realize', self.__realize_cb)
+
         self._list_view = ActivitiesList()
 
         self.search_bar = SearchBar()
-        self.get_vbox().pack_start(self.search_bar, False, False, 0)
+        self._vbox.pack_start(self.search_bar, False, False, 0)
         self.search_bar.connect('query-changed',
                                 self.__toolbar_query_changed_cb)
         self.search_bar.search_entry.connect('key-press-event',
@@ -64,7 +112,7 @@ def __init__(self):
 
         self._scrolled_window.add(self._list_view)
 
-        self.get_vbox().pack_start(self._scrolled_window, True, True, 0)
+        self._vbox.pack_start(self._scrolled_window, True, True, 0)
 
         self._list_view.show()
         self._list_view.connect('clear-clicked',
@@ -101,6 +149,17 @@ def __init__(self):
 
         self.show()
 
+    def __close_button_clicked_cb(self, button):
+        self.destroy()
+
+    def __realize_cb(self, widget):
+        shell.get_model().push_modal()
+        self.set_type_hint(Gdk.WindowTypeHint.DIALOG)
+        window = self.get_window()
+        window.set_accept_focus(True)
+        shell.get_model().push_modal()
+
+
     def __toolbar_query_changed_cb(self, toolbar, query):
         self._query = normalize_string(query.decode('utf-8'))
         self._list_view.set_filter(self._query)
@@ -125,6 +184,10 @@ def __toolbar_query_changed_cb(self, toolbar, query):
             toolbar.search_entry.select_region(pos, -1)
 
     def __key_press_event_cb(self, widget, event):
+        keyname = Gdk.keyval_name(event.keyval)
+        if keyname == 'Escape':
+            self.destroy()
+
         if not self.search_bar.search_entry.has_focus():
             self.search_bar.search_entry.grab_focus()
 
@@ -146,7 +209,7 @@ def __activitylist_clear_clicked_cb(self, list_view, toolbar):
         toolbar.clear_query()
 
     def set_title(self, text):
-        self.get_title_box().set_title(text)
+        self._title_box.set_title(text)
 
     def _got_row_tree_view(self, row):
         bundle_id = row[self.tree_view._model.column_bundle_id]
diff --git a/src/jarabe/journal/journalactivity.py b/src/jarabe/journal/journalactivity.py
index afef81b8f..d00c7ff46 100644
--- a/src/jarabe/journal/journalactivity.py
+++ b/src/jarabe/journal/journalactivity.py
@@ -51,7 +51,7 @@
 from jarabe.journal.journalwindow import JournalWindow
 from jarabe.journal.bundlelauncher import launch_bundle, get_bundle
 
-from jarabe.model import session
+from jarabe.model import session, shell
 
 from sugar3.graphics import style
 
@@ -360,7 +360,18 @@ def __add_project_activate_cb(self, bar, title):
             activity_id=None, project_metadata=None)
 
     def __add_new_activate_cb(self, bar, title):
+        shell_model = shell.get_model()
+        activity = shell_model.get_active_activity()
+        if activity.has_shell_window():
+            return
+
+        if shell.get_model().has_modal():
+            return
+
         chooser = ActivityChooser()
+        activity.push_shell_window(chooser)
+        chooser.connect('hide', activity.pop_shell_window)
+
         text = _("Choose an activity to start '%s' with") % title
         chooser.set_title(text)
         chooser.connect('activity-selected',