Lots of fremantle works
authorepage <eopage@byu.net>
Sun, 20 Sep 2009 03:30:26 +0000 (03:30 +0000)
committerepage <eopage@byu.net>
Sun, 20 Sep 2009 03:30:26 +0000 (03:30 +0000)
git-svn-id: file:///svnroot/gc-dialer/trunk@452 c39d3808-3fe2-4d86-a59f-b7f623ee9f21

src/dc_glade.py
src/dialcentral.glade
src/gtk_toolbox.py
src/gv_views.py
src/hildonize.py
support/builddeb.py

index 56c3df2..c976cdb 100755 (executable)
@@ -117,29 +117,31 @@ class Dialcentral(object):
                        'recent_scrolledwindow',
                        'message_scrolledwindow',
                        'contacts_scrolledwindow',
+               ):
+                       hildonize.hildonize_scrollwindow(self._widgetTree.get_widget(scrollingWidget))
+               for scrollingWidget in (
                        "phoneSelectionMessage_scrolledwindow",
                        "phonetypes_scrolledwindow",
                        "smsMessage_scrolledwindow",
                        "smsMessage_scrolledEntry",
                ):
-                       hildonize.set_thumb_scrollbar(self._widgetTree.get_widget(scrollingWidget))
+                       hildonize.hildonize_scrollwindow_with_viewport(self._widgetTree.get_widget(scrollingWidget))
 
-               hildonize.hildonize_menu(self._window, self._widgetTree.get_widget("dialpad_menubar"))
+               replacementButtons = [gtk.Button("Test")]
+               menu = hildonize.hildonize_menu(
+                       self._window,
+                       self._widgetTree.get_widget("dialpad_menubar"),
+                       replacementButtons
+               )
 
-               if hildonize.IS_HILDON:
+               if hildonize.IS_HILDON_SUPPORTED:
                        self._window.connect("key-press-event", self._on_key_press)
                        self._window.connect("window-state-event", self._on_window_state_change)
                else:
                        logging.warning("No hildonization support")
 
-
                hildonize.set_application_title(self._window, "%s" % constants.__pretty_app_name__)
 
-               callbackMapping = {
-                       "on_dialpad_quit": self._on_close,
-               }
-               self._widgetTree.signal_autoconnect(callbackMapping)
-
                self._window.connect("destroy", self._on_close)
                self._window.set_default_size(800, 300)
                self._window.show_all()
@@ -205,7 +207,7 @@ class Dialcentral(object):
                                        self._errorDisplay.push_exception()
                                alarm_handler = None
                                logging.warning("No notification support")
-                       if hildonize.IS_HILDON:
+                       if hildonize.IS_HILDON_SUPPORTED:
                                try:
                                        import led_handler
                                        self._ledHandler = led_handler.LedHandler()
@@ -295,10 +297,12 @@ class Dialcentral(object):
                                "on_refresh": self._on_menu_refresh,
                                "on_rotate": self._on_menu_rotate,
                                "on_clearcookies_clicked": self._on_clearcookies_clicked,
-                               "on_notebook_switch_page": self._on_notebook_switch_page,
                                "on_about_activate": self._on_about_activate,
                        }
-                       self._widgetTree.signal_autoconnect(callbackMapping)
+                       if hildonize.GTK_MENU_USED:
+                               self._widgetTree.signal_autoconnect(callbackMapping)
+                       self._notebook.connect("switch-page", self._on_notebook_switch_page)
+                       self._widgetTree.get_widget("clearcookies").connect("clicked", self._on_clearcookies_clicked)
 
                        with gtk_toolbox.gtk_lock():
                                self._originalCurrentLabels = [
@@ -792,7 +796,8 @@ class Dialcentral(object):
        def _on_paste(self, *args):
                try:
                        contents = self._clipboard.wait_for_text()
-                       self._dialpads[self._selectedBackendId].set_number(contents)
+                       if contents is not None:
+                               self._dialpads[self._selectedBackendId].set_number(contents)
                except Exception, e:
                        self._errorDisplay.push_exception()
 
@@ -827,7 +832,7 @@ def run_dialpad():
        #with gtk_toolbox.flock(_lock_file, 0):
        gtk.gdk.threads_init()
 
-       if hildonize.IS_HILDON:
+       if hildonize.IS_HILDON_SUPPORTED:
                gtk.set_application_name(constants.__pretty_app_name__)
        handle = Dialcentral()
        gtk.main()
index 3311eb4..d910edd 100644 (file)
                         </child>
                       </widget>
                     </child>
-                    <child>
-                      <widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
-                        <property name="visible">True</property>
-                      </widget>
-                    </child>
-                    <child>
-                      <widget class="GtkImageMenuItem" id="quit_menu_item">
-                        <property name="label">gtk-quit</property>
-                        <property name="visible">True</property>
-                        <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <signal name="activate" handler="on_dialpad_quit"/>
-                      </widget>
-                    </child>
                   </widget>
                 </child>
               </widget>
                         <signal name="activate" handler="on_paste"/>
                       </widget>
                     </child>
-                    <child>
-                      <widget class="GtkImageMenuItem" id="delete_menu_item">
-                        <property name="label">Clear Number</property>
-                        <property name="visible">True</property>
-                        <property name="tooltip" translatable="yes">Clear Number</property>
-                        <property name="use_stock">False</property>
-                        <signal name="activate" handler="on_clear_number"/>
-                        <child internal-child="image">
-                          <widget class="GtkImage" id="image4">
-                            <property name="visible">True</property>
-                            <property name="stock">gtk-delete</property>
-                          </widget>
-                        </child>
-                      </widget>
-                    </child>
                   </widget>
                 </child>
               </widget>
                     </child>
                     <child>
                       <widget class="GtkMenuItem" id="rotateMenuItem">
-                        <property name="label" translatable="yes">_Rotate</property>
                         <property name="visible">True</property>
+                        <property name="label" translatable="yes">_Rotate</property>
                         <property name="use_underline">True</property>
                         <signal name="activate" handler="on_rotate"/>
                       </widget>
             <property name="tab_pos">left</property>
             <property name="show_border">False</property>
             <property name="homogeneous">True</property>
-            <signal name="switch_page" handler="on_notebook_switch_page"/>
             <child>
               <widget class="GtkVBox" id="keypad_vbox">
                 <property name="visible">True</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="receives_default">False</property>
-                        <signal name="clicked" handler="on_dial_clicked"/>
                         <accelerator key="Return" signal="clicked"/>
                         <child>
                           <widget class="GtkHBox" id="hbox1">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
-                        <signal name="clicked" handler="on_sms_clicked"/>
                         <accelerator key="Return" signal="clicked"/>
                         <child>
                           <widget class="GtkHBox" id="hbox2">
               </packing>
             </child>
             <child>
-              <widget class="GtkScrolledWindow" id="recent_scrolledwindow">
+              <widget class="GtkVBox" id="vbox2">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">never</property>
+                <property name="orientation">vertical</property>
                 <child>
-                  <widget class="GtkTreeView" id="recentview">
+                  <widget class="GtkScrolledWindow" id="recent_scrolledwindow">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <property name="rules_hint">True</property>
-                    <property name="enable_grid_lines">horizontal</property>
-                    <property name="enable_tree_lines">True</property>
-                    <signal name="row_activated" handler="on_recentview_row_activated"/>
+                    <property name="hscrollbar_policy">never</property>
+                    <child>
+                      <widget class="GtkTreeView" id="recentview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="rules_hint">True</property>
+                        <property name="enable_grid_lines">horizontal</property>
+                        <property name="enable_tree_lines">True</property>
+                      </widget>
+                    </child>
                   </widget>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
                 </child>
               </widget>
               <packing>
               </packing>
             </child>
             <child>
-              <widget class="GtkScrolledWindow" id="message_scrolledwindow">
+              <widget class="GtkVBox" id="vbox3">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">never</property>
-                <property name="vscrollbar_policy">automatic</property>
+                <property name="orientation">vertical</property>
                 <child>
-                  <widget class="GtkTreeView" id="messages_view">
+                  <widget class="GtkScrolledWindow" id="message_scrolledwindow">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <property name="rules_hint">True</property>
-                    <property name="enable_grid_lines">horizontal</property>
-                    <property name="enable_tree_lines">True</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <property name="vscrollbar_policy">automatic</property>
+                    <child>
+                      <widget class="GtkTreeView" id="messages_view">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="rules_hint">True</property>
+                        <property name="enable_grid_lines">horizontal</property>
+                        <property name="enable_tree_lines">True</property>
+                      </widget>
+                    </child>
                   </widget>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
                 </child>
               </widget>
               <packing>
               </packing>
             </child>
             <child>
-              <widget class="GtkTable" id="contacts_table">
+              <widget class="GtkVBox" id="vbox5">
                 <property name="visible">True</property>
-                <property name="n_rows">2</property>
+                <property name="orientation">vertical</property>
                 <child>
                   <widget class="GtkComboBox" id="addressbook_combo">
                     <property name="visible">True</property>
-                    <signal name="changed" handler="on_addressbook_combo_changed"/>
                   </widget>
                   <packing>
-                    <property name="y_options">GTK_FILL</property>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
                   </packing>
                 </child>
                 <child>
                         <property name="fixed_height_mode">True</property>
                         <property name="enable_grid_lines">horizontal</property>
                         <property name="enable_tree_lines">True</property>
-                        <signal name="row_activated" handler="on_contactsview_row_activated"/>
                       </widget>
                     </child>
                   </widget>
                   <packing>
-                    <property name="top_attach">1</property>
-                    <property name="bottom_attach">2</property>
+                    <property name="position">1</property>
                   </packing>
                 </child>
               </widget>
               <packing>
                 <property name="position">3</property>
-                <property name="tab_expand">True</property>
-                <property name="tab_fill">False</property>
               </packing>
             </child>
             <child>
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="focus_on_click">False</property>
-                    <signal name="clicked" handler="on_clearcookies_clicked"/>
                   </widget>
                   <packing>
                     <property name="left_attach">1</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_loginclose_clicked"/>
               </widget>
               <packing>
                 <property name="expand">False</property>
                 <property name="can_default">True</property>
                 <property name="receives_default">True</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_loginbutton_clicked"/>
               </widget>
               <packing>
                 <property name="expand">False</property>
         <property name="visible">True</property>
         <property name="spacing">2</property>
         <child>
-          <widget class="GtkScrolledWindow" id="phoneSelectionMessage_scrolledwindow">
+          <widget class="GtkVBox" id="vbox1">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">never</property>
-            <property name="vscrollbar_policy">automatic</property>
+            <property name="orientation">vertical</property>
             <child>
-              <widget class="GtkViewport" id="phoneSelectionMessage_viewport">
+              <widget class="GtkScrolledWindow" id="phoneSelectionMessage_scrolledwindow">
                 <property name="visible">True</property>
-                <property name="resize_mode">queue</property>
+                <property name="can_focus">True</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">automatic</property>
                 <child>
-                  <widget class="GtkLabel" id="phoneSelectionMessage">
+                  <widget class="GtkViewport" id="phoneSelectionMessage_viewport">
                     <property name="visible">True</property>
-                    <property name="use_markup">True</property>
-                    <property name="wrap">True</property>
+                    <property name="resize_mode">queue</property>
+                    <child>
+                      <widget class="GtkLabel" id="phoneSelectionMessage">
+                        <property name="visible">True</property>
+                        <property name="use_markup">True</property>
+                        <property name="wrap">True</property>
+                      </widget>
+                    </child>
                   </widget>
                 </child>
               </widget>
+              <packing>
+                <property name="position">0</property>
+              </packing>
             </child>
           </widget>
           <packing>
           </packing>
         </child>
         <child>
-          <widget class="GtkScrolledWindow" id="phonetypes_scrolledwindow">
+          <widget class="GtkVBox" id="vbox2">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">never</property>
-            <property name="vscrollbar_policy">automatic</property>
+            <property name="orientation">vertical</property>
             <child>
-              <widget class="GtkTreeView" id="phonetypes">
+              <widget class="GtkScrolledWindow" id="phonetypes_scrolledwindow">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="rules_hint">True</property>
-                <property name="enable_search">False</property>
-                <signal name="row_activated" handler="on_phonetype_select"/>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">automatic</property>
+                <child>
+                  <widget class="GtkTreeView" id="phonetypes">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="rules_hint">True</property>
+                    <property name="enable_search">False</property>
+                  </widget>
+                </child>
               </widget>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">0</property>
+              </packing>
             </child>
           </widget>
           <packing>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
-                <signal name="clicked" handler="on_phonetype_select"/>
               </widget>
               <packing>
                 <property name="expand">False</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">True</property>
                 <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_phonetype_cancel"/>
               </widget>
               <packing>
                 <property name="expand">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child>
-          <widget class="GtkScrolledWindow" id="smsMessage_scrolledwindow">
+          <widget class="GtkVBox" id="vbox1">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">never</property>
-            <property name="vscrollbar_policy">automatic</property>
+            <property name="orientation">vertical</property>
             <child>
-              <widget class="GtkViewport" id="smsMessage_viewport">
+              <widget class="GtkScrolledWindow" id="smsMessage_scrolledwindow">
                 <property name="visible">True</property>
-                <property name="resize_mode">queue</property>
+                <property name="can_focus">True</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">automatic</property>
                 <child>
-                  <widget class="GtkLabel" id="smsMessage">
+                  <widget class="GtkViewport" id="smsMessage_viewport">
                     <property name="visible">True</property>
-                    <property name="use_markup">True</property>
-                    <property name="wrap">True</property>
+                    <property name="resize_mode">queue</property>
+                    <child>
+                      <widget class="GtkLabel" id="smsMessage">
+                        <property name="visible">True</property>
+                        <property name="use_markup">True</property>
+                        <property name="wrap">True</property>
+                      </widget>
+                    </child>
                   </widget>
                 </child>
               </widget>
+              <packing>
+                <property name="position">0</property>
+              </packing>
             </child>
           </widget>
           <packing>
           </packing>
         </child>
         <child>
-          <widget class="GtkScrolledWindow" id="smsMessage_scrolledEntry">
+          <widget class="GtkVBox" id="vbox2">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">never</property>
-            <property name="vscrollbar_policy">automatic</property>
+            <property name="orientation">vertical</property>
             <child>
-              <widget class="GtkTextView" id="smsEntry">
+              <widget class="GtkScrolledWindow" id="smsMessage_scrolledEntry">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="wrap_mode">word</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="vscrollbar_policy">automatic</property>
+                <child>
+                  <widget class="GtkTextView" id="smsEntry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="wrap_mode">word</property>
+                  </widget>
+                </child>
               </widget>
+              <packing>
+                <property name="position">0</property>
+              </packing>
             </child>
           </widget>
           <packing>
index a56ed3b..39ca4ff 100644 (file)
@@ -299,11 +299,8 @@ class LoginWindow(object):
                self._serviceCombo.add_attribute(cell, 'text', 1)
                self._serviceCombo.set_active(0)
 
-               callbackMapping = {
-                       "on_loginbutton_clicked": self._on_loginbutton_clicked,
-                       "on_loginclose_clicked": self._on_loginclose_clicked,
-               }
-               widgetTree.signal_autoconnect(callbackMapping)
+               widgetTree.get_widget("loginbutton").connect("clicked", self._on_loginbutton_clicked)
+               widgetTree.get_widget("logins_close_button").connect("clicked", self._on_loginclose_clicked)
 
        def request_credentials(self,
                parentWindow = None,
index 1760922..df7b403 100644 (file)
@@ -472,18 +472,18 @@ class Dialpad(object):
                self._smsDialog = SmsEntryDialog(widgetTree)
 
                self._numberdisplay = widgetTree.get_widget("numberdisplay")
+               self._smsButton = widgetTree.get_widget("sms")
                self._dialButton = widgetTree.get_widget("dial")
                self._backButton = widgetTree.get_widget("back")
                self._phonenumber = ""
                self._prettynumber = ""
 
                callbackMapping = {
-                       "on_dial_clicked": self._on_dial_clicked,
-                       "on_sms_clicked": self._on_sms_clicked,
                        "on_digit_clicked": self._on_digit_clicked,
-                       "on_clear_number": self._on_clear_number,
                }
                widgetTree.signal_autoconnect(callbackMapping)
+               self._dialButton.connect("clicked", self._on_dial_clicked)
+               self._smsButton.connect("clicked", self._on_sms_clicked)
 
                self._originalLabel = self._backButton.get_label()
                self._backTapHandler = gtk_toolbox.TapOrHold(self._backButton)
@@ -563,12 +563,6 @@ class Dialpad(object):
                except Exception, e:
                        self._errorDisplay.push_exception()
 
-       def _on_clear_number(self, *args):
-               try:
-                       self.clear()
-               except Exception, e:
-                       self._errorDisplay.push_exception()
-
        def _on_digit_clicked(self, widget):
                try:
                        self.set_number(self._phonenumber + widget.get_name()[-1])
index 0ad4d14..bc4c07c 100644 (file)
@@ -10,103 +10,170 @@ class FakeHildonModule(object):
 
 
 try:
-       import hildon
+       import hildon as _hildon
+       hildon  = _hildon # Dumb but gets around pyflakiness
 except (ImportError, OSError):
        hildon = FakeHildonModule
 
 
-IS_HILDON = hildon is not FakeHildonModule
+IS_HILDON_SUPPORTED = hildon is not FakeHildonModule
 
 
 class FakeHildonProgram(object):
        pass
 
 
-if IS_HILDON:
-       def get_app_class():
-               return hildon.Program
-else:
-       def get_app_class():
-               return FakeHildonProgram
+def _hildon_get_app_class():
+       return hildon.Program
+
+
+def _null_get_app_class():
+       return FakeHildonProgram
 
 
-if IS_HILDON:
-       def set_application_title(window, title):
-               pass
+if IS_HILDON_SUPPORTED:
+       get_app_class = _hildon_get_app_class
 else:
-       def set_application_title(window, title):
-               window.set_title(title)
+       get_app_class = _null_get_app_class
+
+
+def _hildon_set_application_title(window, title):
+       pass
 
 
-if IS_HILDON:
-       def hildonize_window(app, window):
-               oldWindow = window
-               newWindow = hildon.Window()
-               oldWindow.get_child().reparent(newWindow)
-               app.add_window(newWindow)
-               return newWindow
+def _null_set_application_title(window, title):
+       window.set_title(title)
+
+
+if IS_HILDON_SUPPORTED:
+       set_application_title = _hildon_set_application_title
 else:
-       def hildonize_window(app, window):
-               return window
-
-
-if IS_HILDON:
-       def hildonize_menu(window, gtkMenu):
-               hildonMenu = gtk.Menu()
-               for child in gtkMenu.get_children():
-                       child.reparent(hildonMenu)
-               window.set_menu(hildonMenu)
-               gtkMenu.destroy()
-               return hildonMenu
+       set_application_title = _null_set_application_title
+
+
+def _hildon_hildonize_window(app, window):
+       oldWindow = window
+       newWindow = hildon.Window()
+       oldWindow.get_child().reparent(newWindow)
+       app.add_window(newWindow)
+       return newWindow
+
+
+def _null_hildonize_window(app, window):
+       return window
+
+
+if IS_HILDON_SUPPORTED:
+       hildonize_window = _hildon_hildonize_window
 else:
-       def hildonize_menu(window, gtkMenu):
-               return gtkMenu
+       hildonize_window = _null_hildonize_window
+
+
+def _fremantle_hildonize_menu(window, gtkMenu, buttons):
+       appMenu = hildon.AppMenu()
+       for button in buttons:
+               appMenu.append(button)
+       window.set_app_menu(appMenu)
+       gtkMenu.get_parent().remove(gtkMenu)
+       return appMenu
+
 
+def _hildon_hildonize_menu(window, gtkMenu, ignoredButtons):
+       hildonMenu = gtk.Menu()
+       for child in gtkMenu.get_children():
+               child.reparent(hildonMenu)
+       window.set_menu(hildonMenu)
+       gtkMenu.destroy()
+       return hildonMenu
 
-if IS_HILDON:
-       def set_cell_thumb_selectable(renderer):
-               renderer.set_property("scale", 1.5)
+
+def _null_hildonize_menu(window, gtkMenu, ignoredButtons):
+       return gtkMenu
+
+
+try:
+       hildon.AppMenu
+       GTK_MENU_USED = False
+       hildonize_menu = _fremantle_hildonize_menu
+except AttributeError:
+       GTK_MENU_USED = True
+       if IS_HILDON_SUPPORTED:
+               hildonize_menu = _hildon_hildonize_menu
+       else:
+               hildonize_menu = _null_hildonize_menu
+
+
+def _hildon_set_cell_thumb_selectable(renderer):
+       renderer.set_property("scale", 1.5)
+
+
+def _null_set_cell_thumb_selectable(renderer):
+       pass
+
+
+if IS_HILDON_SUPPORTED:
+       set_cell_thumb_selectable = _hildon_set_cell_thumb_selectable
 else:
-       def set_cell_thumb_selectable(renderer):
-               pass
+       set_cell_thumb_selectable = _null_set_cell_thumb_selectable
+
 
+def _hildon_hildonize_text_entry(textEntry):
+       textEntry.set_property('hildon-input-mode', 7)
 
-if IS_HILDON:
-       def hildonize_text_entry(textEntry):
-               textEntry.set_property('hildon-input-mode', 7)
+
+def _null_hildonize_text_entry(textEntry):
+       pass
+
+
+if IS_HILDON_SUPPORTED:
+       hildonize_text_entry = _hildon_hildonize_text_entry
 else:
-       def hildonize_text_entry(textEntry):
-               pass
+       hildonize_text_entry = _null_hildonize_text_entry
+
+
+def _hildon_mark_window_rotatable(window):
+       # gtk documentation is unclear whether this does a "=" or a "|="
+       window.set_flags(hildon.HILDON_PORTRAIT_MODE_SUPPORT)
+
+
+def _null_mark_window_rotatable(window):
+       pass
 
 
 try:
        hildon.HILDON_PORTRAIT_MODE_SUPPORT
-
-       def mark_window_rotatable(window):
-               # gtk documentation is unclear whether this does a "=" or a "|="
-               window.set_flags(hildon.HILDON_PORTRAIT_MODE_SUPPORT)
+       mark_window_rotatable = _hildon_mark_window_rotatable
 except AttributeError:
-       def mark_window_rotatable(window):
-               pass
+       mark_window_rotatable = _null_mark_window_rotatable
+
+
+def _hildon_window_to_portrait(window):
+       # gtk documentation is unclear whether this does a "=" or a "|="
+       window.set_flags(hildon.HILDON_PORTRAIT_MODE_SUPPORT)
+
+
+def _hildon_window_to_landscape(window):
+       # gtk documentation is unclear whether this does a "=" or a "&= ~"
+       window.unset_flags(hildon.HILDON_PORTRAIT_MODE_REQUEST)
+
+
+def _null_window_to_portrait(window):
+       pass
+
+
+def _null_window_to_landscape(window):
+       pass
 
 
 try:
        hildon.HILDON_PORTRAIT_MODE_SUPPORT
        hildon.HILDON_PORTRAIT_MODE_REQUEST
 
-       def window_to_portrait(window):
-               # gtk documentation is unclear whether this does a "=" or a "|="
-               window.set_flags(hildon.HILDON_PORTRAIT_MODE_SUPPORT)
-
-       def window_to_landscape(window):
-               # gtk documentation is unclear whether this does a "=" or a "&= ~"
-               window.unset_flags(hildon.HILDON_PORTRAIT_MODE_REQUEST)
+       window_to_portrait = _hildon_window_to_portrait
+       window_to_landscape = _hildon_window_to_landscape
 except AttributeError:
-       def window_to_portrait(window):
-               pass
-
-       def window_to_landscape(window):
-               pass
+       window_to_portrait = _null_window_to_portrait
+       window_to_landscape = _null_window_to_landscape
 
 
 def get_device_orientation():
@@ -128,99 +195,128 @@ def get_device_orientation():
                raise RuntimeError("Unknown orientation: %s" % orientation)
 
 
-if IS_HILDON:
-       def hildonize_password_entry(textEntry):
-               textEntry.set_property('hildon-input-mode', 7 | (1 << 29))
+def _hildon_hildonize_password_entry(textEntry):
+       textEntry.set_property('hildon-input-mode', 7 | (1 << 29))
+
+
+def _null_hildonize_password_entry(textEntry):
+       pass
+
+
+if IS_HILDON_SUPPORTED:
+       hildonize_password_entry = _hildon_hildonize_password_entry
 else:
-       def hildonize_password_entry(textEntry):
-               pass
+       hildonize_password_entry = _null_hildonize_password_entry
+
 
+def _hildon_hildonize_combo_entry(comboEntry):
+       comboEntry.set_property('hildon-input-mode', 1 << 4)
 
-if IS_HILDON:
-       def hildonize_combo_entry(comboEntry):
-               comboEntry.set_property('hildon-input-mode', 1 << 4)
+
+def _null_hildonize_combo_entry(textEntry):
+       pass
+
+
+if IS_HILDON_SUPPORTED:
+       hildonize_combo_entry = _hildon_hildonize_combo_entry
 else:
-       def hildonize_combo_entry(textEntry):
-               pass
+       hildonize_combo_entry = _null_hildonize_combo_entry
 
 
-try:
-       hildon.PannableArea
-       None.TODO
-       def set_thumb_scrollbar(scrolledWindow):
-               pannableWindow = hildon.PannableArea()
+def _fremantle_hildonize_scrollwindow(scrolledWindow):
+       pannableWindow = hildon.PannableArea()
+
+       child = scrolledWindow.get_child()
+       scrolledWindow.remove(child)
+       pannableWindow.add(child)
+
+       parent = scrolledWindow.get_parent()
+       parent.remove(scrolledWindow)
+       parent.add(pannableWindow)
+
+       return pannableWindow
+
+
+def _hildon_hildonize_scrollwindow(scrolledWindow):
+       hildon.hildon_helper_set_thumb_scrollbar(scrolledWindow, True)
+       return scrolledWindow
 
-               child = scrolledWindow.get_child()
-               scrolledWindow.remove(child)
-               pannableWindow.add(child)
 
-               parent = scrolledWindow.get_parent()
-               parent.remove(scrolledWindow)
-               parent.add(pannableWindow)
+def _null_hildonize_scrollwindow(scrolledWindow):
+       return scrolledWindow
 
-               return pannableWindow
+
+try:
+       hildon.PannableArea
+       hildonize_scrollwindow = _fremantle_hildonize_scrollwindow
+       hildonize_scrollwindow_with_viewport = _hildon_hildonize_scrollwindow
 except AttributeError:
        try:
-               hildon.hildon_helper_set_thumb_scrollbar
-               def set_thumb_scrollbar(scrolledWindow):
-                       hildon.hildon_helper_set_thumb_scrollbar(scrolledWindow, True)
-                       return scrolledWindow
+               hildon.hildon_helper_hildonize_scrollwindow
+               hildonize_scrollwindow = _hildon_hildonize_scrollwindow
+               hildonize_scrollwindow_with_viewport = _hildon_hildonize_scrollwindow
        except AttributeError:
-               def set_thumb_scrollbar(scrolledWindow):
-                       return scrolledWindow
+               hildonize_scrollwindow = _null_hildonize_scrollwindow
+               hildonize_scrollwindow_with_viewport = _null_hildonize_scrollwindow
+
+
+def _hildon_request_number(parent, title, range, default):
+       spinner = hildon.NumberEditor(*range)
+       spinner.set_value(default)
+
+       dialog = gtk.Dialog(
+               title,
+               parent,
+               gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
+               (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
+       )
+       dialog.set_default_response(gtk.RESPONSE_CANCEL)
+       dialog.get_child().add(spinner)
+
+       try:
+               dialog.show_all()
+               response = dialog.run()
+       finally:
+               dialog.hide()
+
+       if response == gtk.RESPONSE_OK:
+               return spinner.get_value()
+       elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT:
+               raise RuntimeError("User cancelled request")
+       else:
+               raise RuntimeError("Unrecognized response %r", response)
+
+
+def _null_request_number(parent, title, range, default):
+       adjustment = gtk.Adjustment(default, range[0], range[1], 1, 5, 0)
+       spinner = gtk.SpinButton(adjustment, 0, 0)
+       spinner.set_wrap(False)
+
+       dialog = gtk.Dialog(
+               title,
+               parent,
+               gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
+               (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
+       )
+       dialog.set_default_response(gtk.RESPONSE_CANCEL)
+       dialog.get_child().add(spinner)
+
+       try:
+               dialog.show_all()
+               response = dialog.run()
+       finally:
+               dialog.hide()
+
+       if response == gtk.RESPONSE_OK:
+               return spinner.get_value_as_int()
+       elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT:
+               raise RuntimeError("User cancelled request")
+       else:
+               raise RuntimeError("Unrecognized response %r", response)
 
 
 try:
        hildon.NumberEditor # TODO deprecated in fremantle
-       def request_number(parent, title, range, default):
-               spinner = hildon.NumberEditor(*range)
-               spinner.set_value(default)
-
-               dialog = gtk.Dialog(
-                       title,
-                       parent,
-                       gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
-                       (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
-               )
-               dialog.set_default_response(gtk.RESPONSE_CANCEL)
-               dialog.get_child().add(spinner)
-
-               try:
-                       dialog.show_all()
-                       response = dialog.run()
-               finally:
-                       dialog.hide()
-
-               if response == gtk.RESPONSE_OK:
-                       return spinner.get_value()
-               elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT:
-                       raise RuntimeError("User cancelled request")
-               else:
-                       raise RuntimeError("Unrecognized response %r", response)
+       request_number = _hildon_request_number
 except AttributeError:
-       def request_number(parent, title, range, default):
-               adjustment = gtk.Adjustment(default, range[0], range[1], 1, 5, 0)
-               spinner = gtk.SpinButton(adjustment, 0, 0)
-               spinner.set_wrap(False)
-
-               dialog = gtk.Dialog(
-                       title,
-                       parent,
-                       gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT,
-                       (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
-               )
-               dialog.set_default_response(gtk.RESPONSE_CANCEL)
-               dialog.get_child().add(spinner)
-
-               try:
-                       dialog.show_all()
-                       response = dialog.run()
-               finally:
-                       dialog.hide()
-
-               if response == gtk.RESPONSE_OK:
-                       return spinner.get_value_as_int()
-               elif response == gtk.RESPONSE_CANCEL or response == gtk.RESPONSE_DELETE_EVENT:
-                       raise RuntimeError("User cancelled request")
-               else:
-                       raise RuntimeError("Unrecognized response %r", response)
+       request_number = _null_request_number
index 121a651..964f944 100755 (executable)
@@ -26,6 +26,7 @@ __changelog__ = """
 * Tweaked sizes of stuff on recent tab
 * Starting some work on rotation support for fremantle
 * Made startup more error resistant
+* Fremantle: Making various areas pannable
 * Bug Fix: some dependencies for Diablo
 * Bug Fix: Error on refreshing tabs when not logged in
 * Bug Fix: #4471 Notification Checkbox Won't Stay Checked (hour roll over error)