[gitg] Implement removing repositories from list



commit 5d50b67b0c77b37bd0baac726b235f6963fa86ba
Author: Jesse van den Kieboom <jessevdk gnome org>
Date:   Wed Jun 25 22:54:00 2014 +0200

    Implement removing repositories from list
    
    https://bugzilla.gnome.org/show_bug.cgi?id=729729

 libgitg/gitg-repository-list-box.vala             |   41 +++++++++++++++++-
 libgitg/resources/gitg-repository-list-box-row.ui |   48 ++++++++++++++++++--
 2 files changed, 83 insertions(+), 6 deletions(-)
---
diff --git a/libgitg/gitg-repository-list-box.vala b/libgitg/gitg-repository-list-box.vala
index 5d5ad07..9d18e72 100644
--- a/libgitg/gitg-repository-list-box.vala
+++ b/libgitg/gitg-repository-list-box.vala
@@ -43,6 +43,10 @@ namespace Gitg
                        private Gtk.Arrow d_arrow;
                        [GtkChild]
                        private Gtk.Spinner d_spinner;
+                       [GtkChild]
+                       private Gtk.Button d_remove_button;
+
+                       public signal void request_remove();
 
                        public Repository? repository
                        {
@@ -64,6 +68,14 @@ namespace Gitg
                                }
                        }
 
+                       public bool can_remove
+                       {
+                               set
+                               {
+                                       d_remove_button.sensitive = value;
+                               }
+                       }
+
                        public DateTime time
                        {
                                get { return d_time; }
@@ -127,6 +139,12 @@ namespace Gitg
                        {
                                Object(repository_name: name, branch_name: branch_name, has_remote: 
has_remote);
                        }
+
+                       [GtkCallback]
+                       private void remove_button_clicked(Gtk.Button remove)
+                       {
+                               request_remove();
+                       }
                }
 
                public signal void repository_activated(Repository repository);
@@ -251,6 +269,8 @@ namespace Gitg
                {
                        Row? row = get_row_for_repository(repository);
 
+                       var f = repository.workdir != null ? repository.workdir : repository.location;
+
                        if (row == null)
                        {
                                string head_name = "";
@@ -271,6 +291,26 @@ namespace Gitg
                                row = new Row(repository.name, head_name, has_remote);
                                row.repository = repository;
                                row.show();
+
+                               if (f != null)
+                               {
+                                       row.request_remove.connect(() => {
+                                               try
+                                               {
+                                                       var recent_manager = Gtk.RecentManager.get_default();
+                                                       recent_manager.remove_item(f.get_uri());
+                                               } catch {}
+
+                                               remove(row);
+                                       });
+
+                                       row.can_remove = true;
+                               }
+                               else
+                               {
+                                       row.can_remove = false;
+                               }
+
                                add(row);
                        }
                        else
@@ -280,7 +320,6 @@ namespace Gitg
                                invalidate_sort();
                        }
 
-                       var f = repository.workdir != null ? repository.workdir : repository.location;
                        if (f != null)
                        {
                                add_repository_to_recent_manager(f.get_uri());
diff --git a/libgitg/resources/gitg-repository-list-box-row.ui 
b/libgitg/resources/gitg-repository-list-box-row.ui
index 86c5c62..345f451 100644
--- a/libgitg/resources/gitg-repository-list-box-row.ui
+++ b/libgitg/resources/gitg-repository-list-box-row.ui
@@ -17,6 +17,44 @@
             <property name="margin_bottom">12</property>
             <property name="column_spacing">10</property>
             <child>
+              <object class="GtkAlignment" id="delete_button_align">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="has_focus">False</property>
+                <property name="is_focus">False</property>
+                <property name="yscale">0</property>
+                <property name="yalign">0.5</property>
+                <child>
+                  <object class="GtkButton" id="d_remove_button">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="has_focus">False</property>
+                    <property name="is_focus">False</property>
+                    <property name="vexpand">False</property>
+                    <property name="relief">none</property>
+                    <property name="tooltip_text" translatable="yes">Remove the repository from the list 
(does not delete the repository from disk)</property>
+                    <signal name="clicked" handler="remove_button_clicked" swapped="no"/>
+                    <style>
+                      <class name="image-button"/>
+                    </style>
+                    <child>
+                      <object class="GtkImage" id="delete_image">
+                        <property name="visible">True</property>
+                        <property name="pixel_size">16</property>
+                        <property name="icon_name">list-remove-symbolic</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+                <property name="width">1</property>
+                <property name="height">2</property>
+              </packing>
+            </child>
+            <child>
               <object class="GtkImage" id="d_image">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
@@ -25,7 +63,7 @@
                 <property name="stock">gtk-missing-image</property>
               </object>
               <packing>
-                <property name="left_attach">0</property>
+                <property name="left_attach">1</property>
                 <property name="top_attach">0</property>
                 <property name="width">1</property>
                 <property name="height">2</property>
@@ -43,7 +81,7 @@
                 <property name="ellipsize">end</property>
               </object>
               <packing>
-                <property name="left_attach">1</property>
+                <property name="left_attach">2</property>
                 <property name="top_attach">0</property>
                 <property name="width">1</property>
                 <property name="height">1</property>
@@ -63,7 +101,7 @@
                 </style>
               </object>
               <packing>
-                <property name="left_attach">1</property>
+                <property name="left_attach">2</property>
                 <property name="top_attach">1</property>
                 <property name="width">1</property>
                 <property name="height">1</property>
@@ -78,7 +116,7 @@
                 <property name="shadow_type">none</property>
               </object>
               <packing>
-                <property name="left_attach">2</property>
+                <property name="left_attach">3</property>
                 <property name="top_attach">0</property>
                 <property name="width">1</property>
                 <property name="height">2</property>
@@ -91,7 +129,7 @@
                 <property name="is_focus">False</property>
               </object>
               <packing>
-                <property name="left_attach">3</property>
+                <property name="left_attach">4</property>
                 <property name="top_attach">0</property>
                 <property name="width">1</property>
                 <property name="height">2</property>


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