Revision: 1908
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1908&view=rev
Author:   Sikon
Date:     2008-01-03 06:38:30 -0800 (Thu, 03 Jan 2008)

Log Message:
-----------
Find as you type

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog
    gtkpod/trunk/data/gtkpod.glade
    gtkpod/trunk/src/display_playlists.c
    gtkpod/trunk/src/display_tracks.c
    gtkpod/trunk/src/help.c
    gtkpod/trunk/src/misc.c
    gtkpod/trunk/src/misc.h
    gtkpod/trunk/src/prefs.c
    gtkpod/trunk/src/stock_icons.c

Modified: gtkpod/trunk/ChangeLog
===================================================================
--- gtkpod/trunk/ChangeLog      2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/ChangeLog      2008-01-03 14:38:30 UTC (rev 1908)
@@ -27,6 +27,8 @@
   * src/display_tracks.c:
   
     multi_edit_title is now ignored (always true).
+       Find-as-you-type search implemented using GtkTreeModelFilter.
+       (Remember to use get_model instead of gtk_tree_view_get_model)
        
   * src/prefsdlg.c:
   * data/gtkpod.glade:
@@ -43,6 +45,16 @@
   * src/stock_icons.h:
   
     Use GtkIconTheme for stock icon handling.
+       
+  * src/misc.c:
+  * src/misc.h:
+  
+    Added utf8_strcasestr (a copied g_utf8_strcasestr from GtkSourceView).
+       
+  * src/help.c:
+  
+    Translation string optimization, as suggested by Daniele Forsi and
+       Bastien Nocera <[EMAIL PROTECTED]>.
 
 2008-01-02 Matvey Kozhev <sikon at users.sourceforge.net>
 

Modified: gtkpod/trunk/data/gtkpod.glade
===================================================================
--- gtkpod/trunk/data/gtkpod.glade      2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/data/gtkpod.glade      2008-01-03 14:38:30 UTC (rev 1908)
@@ -3,7 +3,7 @@
 <!--*- mode: xml -*-->
 <glade-interface>
   <widget class="GtkWindow" id="gtkpod">
-    <property name="title" translatable="yes">gtkpod</property>
+    <property name="title" translatable="yes">gtkpod iPod Manager</property>
     <property name="default_width">600</property>
     <property name="default_height">500</property>
     <property name="icon">gtkpod-icon-48.png</property>
@@ -1230,7 +1230,7 @@
           <widget class="GtkHPaned" id="paned0">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="position">150</property>
+            <property name="position">235</property>
             <signal name="button_release_event" 
handler="on_paned0_button_release_event"/>
             <child>
               <widget class="GtkVBox" id="vbox2">
@@ -1417,14 +1417,76 @@
                       </packing>
                     </child>
                     <child>
-                      <widget class="GtkScrolledWindow" id="track_window">
+                      <widget class="GtkVBox" id="vbox29">
                         <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property 
name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                        <property 
name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
                         <child>
-                          <placeholder/>
+                          <widget class="GtkHBox" id="hbox75">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | 
GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="border_width">6</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <widget class="GtkLabel" 
id="current_playlist_label">
+                                <property name="visible">True</property>
+                                <property 
name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="xalign">0</property>
+                                <property name="label" 
translatable="yes">&lt;b&gt;No playlist selected&lt;/b&gt;</property>
+                                <property name="use_markup">True</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkLabel" id="label22">
+                                <property name="visible">True</property>
+                                <property 
name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" 
translatable="yes">Search:</property>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property 
name="pack_type">GTK_PACK_END</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkEntry" id="search_entry">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="width_chars">20</property>
+                                <signal name="changed" 
handler="on_search_entry_changed"/>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property 
name="pack_type">GTK_PACK_END</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                          </packing>
                         </child>
+                        <child>
+                          <widget class="GtkScrolledWindow" id="track_window">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property 
name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                            <property 
name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
                       </widget>
                       <packing>
                         <property name="resize">True</property>
@@ -1433,9 +1495,6 @@
                     </child>
                   </widget>
                 </child>
-                <child>
-                  <placeholder/>
-                </child>
               </widget>
               <packing>
                 <property name="resize">True</property>
@@ -9198,6 +9257,7 @@
   <widget class="GtkWindow" id="file_transfer_information_dialog">
     <property name="border_width">2</property>
     <property name="title" translatable="yes">Progress Information</property>
+    <property name="skip_taskbar_hint">True</property>
     <child>
       <widget class="GtkVBox" id="vbox180">
         <property name="visible">True</property>

Modified: gtkpod/trunk/src/display_playlists.c
===================================================================
--- gtkpod/trunk/src/display_playlists.c        2008-01-03 10:21:48 UTC (rev 
1907)
+++ gtkpod/trunk/src/display_playlists.c        2008-01-03 14:38:30 UTC (rev 
1908)
@@ -1376,14 +1376,14 @@
 static void pm_selection_changed_cb (GtkTreeSelection *selection,
                                     gpointer user_data2)
 {
-  GtkTreeModel *model;
-  GtkTreeIter  iter;
-  Playlist *new_playlist = NULL;
+       GtkTreeModel *model;
+       GtkTreeIter  iter;
+       Playlist *new_playlist = NULL;
 
 #if DEBUG_TIMING
-  GTimeVal time;
-  g_get_current_time (&time);
-  printf ("pm_selection_changed_cb enter: %ld.%06ld sec\n",
+       GTimeVal time;
+       g_get_current_time (&time);
+       printf ("pm_selection_changed_cb enter: %ld.%06ld sec\n",
          time.tv_sec % 3600, time.tv_usec);
 #endif
 
@@ -1391,77 +1391,93 @@
         * in playlist
         */
         coverart_block_change (TRUE);
-  
-  if (gtk_tree_selection_get_selected (selection, &model, &iter) == FALSE)
-  {  /* no selection -> reset sort tabs */
-      st_init (-1, 0);
-      current_playlist = NULL;
-  }
-  else
-  {   /* handle new selection */
-      gtk_tree_model_get (model, &iter, 
+
+       if (gtk_tree_selection_get_selected (selection, &model, &iter) == FALSE)
+       {  /* no selection -> reset sort tabs */
+               st_init (-1, 0);
+               current_playlist = NULL;
+       }
+       else
+       {
+               gchar *label_text;
+               
+               /* handle new selection */
+               gtk_tree_model_get (model, &iter, 
                          PM_COLUMN_PLAYLIST, &new_playlist,
                          -1);
 
-      /* If new playlist is in an iPod itdb, set the mountpoint for
-       * the free space display to this iPod (there may be several
-       * iPods connected */
-      g_return_if_fail (new_playlist);
-      g_return_if_fail (new_playlist->itdb);
-      if (new_playlist->itdb->usertype & GP_ITDB_TYPE_IPOD)
-      {
-         space_set_ipod_itdb (new_playlist->itdb);
-      }
-      
-      if (gphoto_is_photo_playlist (new_playlist))
-      {
+               /* If new playlist is in an iPod itdb, set the mountpoint for
+               * the free space display to this iPod (there may be several
+               * iPods connected */
+               g_return_if_fail (new_playlist);
+               g_return_if_fail (new_playlist->itdb);
+
+               label_text = g_markup_printf_escaped ("<b>%s</b>", 
new_playlist->name);
+               
+               gtk_label_set_markup (GTK_LABEL (gtkpod_xml_get_widget 
(main_window_xml, "current_playlist_label")),
+                                                         label_text);
+               
+               g_free (label_text);
+
+               if (new_playlist->itdb->usertype & GP_ITDB_TYPE_IPOD)
+               {
+                       space_set_ipod_itdb (new_playlist->itdb);
+               }
+
+               if (gphoto_is_photo_playlist (new_playlist))
+               {
                                /* This is the photo playlist so need to load 
photo database
-      * rather than get tracks.
+               * rather than get tracks.
                                */
                                gphoto_display_photo_window 
(new_playlist->itdb);
-      }
-      else
-      {
+               }
+               else
+               {
                                gphoto_change_to_photo_window (FALSE);
-      }
+               }
 
-      /* remove all entries from sort tab 0 */
-      /* printf ("removing entries: %x\n", current_playlist);*/
-      st_init (-1, 0);
+               /* remove all entries from sort tab 0 */
+               /* printf ("removing entries: %x\n", current_playlist);*/
+               st_init (-1, 0);
 
-     current_playlist = new_playlist;
-      if (new_playlist->is_spl && new_playlist->splpref.liveupdate)
-         itdb_spl_update (new_playlist);
-      if (new_playlist->members)
-      {
-         GList *gl;
+               current_playlist = new_playlist;
+               if (new_playlist->is_spl && new_playlist->splpref.liveupdate)
+                       itdb_spl_update (new_playlist);
+                                                         
+               if (new_playlist->members)
+               {
+                       GList *gl;
 
-         st_enable_disable_view_sort (0, FALSE);
-         for (gl=new_playlist->members; gl; gl=gl->next)
-         { /* add all tracks to sort tab 0 */
-             Track *track = gl->data;
-             st_add_track (track, FALSE, TRUE, 0);
-         }
-         st_enable_disable_view_sort (0, TRUE);
-         st_add_track (NULL, TRUE, TRUE, 0);
-      }
-      gtkpod_tracks_statusbar_update();
-  }
-  
-  /* Reallow the coverart selection update */
-  coverart_block_change (FALSE);
-  /* Set the coverart display based on the selected playlist */
-  coverart_display_update(TRUE);
+                       st_enable_disable_view_sort (0, FALSE);
+                       
+                       for (gl=new_playlist->members; gl; gl=gl->next)
+                       {
+                               /* add all tracks to sort tab 0 */
+                               Track *track = gl->data;
+                               st_add_track (track, FALSE, TRUE, 0);
+                       }
+                       
+                       st_enable_disable_view_sort (0, TRUE);
+                       st_add_track (NULL, TRUE, TRUE, 0);
+               }
+                                                         
+               gtkpod_tracks_statusbar_update();
+       }
+
+       /* Reallow the coverart selection update */
+       coverart_block_change (FALSE);
+       /* Set the coverart display based on the selected playlist */
+       coverart_display_update(TRUE);
         
-  space_data_update ();
-    
+       space_data_update ();
+
 #if DEBUG_TIMING
-  g_get_current_time (&time);
-  printf ("pm_selection_changed_cb exit:  %ld.%06ld sec\n",
+       g_get_current_time (&time);
+       printf ("pm_selection_changed_cb exit:  %ld.%06ld sec\n",
          time.tv_sec % 3600, time.tv_usec);
 #endif 
-  /* make only suitable delete menu items available */
-  display_adjust_menus ();
+       /* make only suitable delete menu items available */
+       display_adjust_menus ();
 }
 
 /* Callback function called when the selection

Modified: gtkpod/trunk/src/display_tracks.c
===================================================================
--- gtkpod/trunk/src/display_tracks.c   2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/src/display_tracks.c   2008-01-03 14:38:30 UTC (rev 1908)
@@ -82,12 +82,78 @@
 const gchar *TM_PREFS_SEARCH_COLUMN = "tm_prefs_search_column";
 
 
+/* Convenience functions */
+static gboolean filter_tracks (GtkTreeModel *model, GtkTreeIter *iter, 
gpointer entry)
+{
+    Track *tr;
+       gboolean result = FALSE;
+       const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry));
+       int i;
+
+       gtk_tree_model_get(model, iter, READOUT_COL, &tr, -1);
+       
+    for (i = 0; i < TM_NUM_COLUMNS; i++)
+    {
+               gint visible = prefs_get_int_index("col_visible", i);
+               gchar *data;
+               
+               if (!visible)
+                       continue;
+               
+               data = track_get_text (tr, TM_to_T (i));
+               
+               if (data && utf8_strcasestr (data, text))
+               {
+                       g_free (data);
+                       result = TRUE;
+                       break;
+               }
+
+               g_free (data);
+       }
+
+       return result;
+}
+
+static GtkTreeModel *get_model (GtkTreeView *tree)
+{
+       GtkTreeModel *model = gtk_tree_view_get_model (tree);
+       
+       if (!GTK_IS_TREE_MODEL_FILTER (model))
+               return model;
+       else
+               return gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER 
(model));
+}
+
+static GtkTreeModelFilter *get_filter (GtkTreeView *tree)
+{
+       GtkTreeModel *model = gtk_tree_view_get_model (tree);
+       
+       if (GTK_IS_TREE_MODEL_FILTER (model))
+               return GTK_TREE_MODEL_FILTER (model);
+       else
+       {
+               GtkTreeModelFilter *filter = GTK_TREE_MODEL_FILTER 
(gtk_tree_model_filter_new (model, NULL));
+               GtkWidget *search_entry = gtkpod_xml_get_widget 
(main_window_xml, "search_entry");
+               
+               gtk_tree_model_filter_set_visible_func (filter, filter_tracks, 
search_entry, NULL);
+               gtk_tree_model_filter_refilter (filter);
+               gtk_tree_view_set_model (tree, GTK_TREE_MODEL (filter));
+               
+               return filter;
+       }
+}
+
+G_MODULE_EXPORT void on_search_entry_changed (GtkEditable *editable, gpointer 
user_data)
+{
+       gtk_tree_model_filter_refilter (get_filter (track_treeview));
+}
+
 /* ---------------------------------------------------------------- */
 /* Section for track display                                        */
 /* DND -- Drag And Drop                                             */
 /* ---------------------------------------------------------------- */
 
-
 /* Move the paths listed in @data before or after (according to @pos)
    @path. Used for DND */
 static gboolean tm_move_pathlist (gchar *data,
@@ -104,7 +170,7 @@
     g_return_val_if_fail (data, FALSE);
     g_return_val_if_fail (*data, FALSE);
 
-    model = gtk_tree_view_get_model (track_treeview);
+    model = get_model (track_treeview);
     g_return_val_if_fail (model, FALSE);
 
     g_return_val_if_fail (gtk_tree_model_get_iter (model, &to_iter, path),
@@ -420,7 +486,7 @@
     {   /* drag is within the same widget */
        gint column;
        GtkSortType order;
-       GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
+       GtkTreeModel *model = get_model(GTK_TREE_VIEW(widget));
        g_return_val_if_fail (model, FALSE);
        if(gtk_tree_sortable_get_sort_column_id (
               GTK_TREE_SORTABLE (model), &column, &order))
@@ -506,7 +572,7 @@
 
     display_remove_autoscroll_row_timeout (widget);
 
-    model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+    model = get_model (GTK_TREE_VIEW (widget));
     g_return_if_fail (model);
     if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),
                                            x, y, &path, &pos))
@@ -624,7 +690,7 @@
 void tm_add_track_to_track_model (Track *track, GtkTreeIter *into_iter)
 {
     GtkTreeIter iter;
-    GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+    GtkTreeModel *model = get_model (track_treeview);
 
     g_return_if_fail (model != NULL);
 
@@ -667,7 +733,7 @@
 /* Remove track from the display model */
 void tm_remove_track (Track *track)
 {
-  GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+  GtkTreeModel *model = get_model (track_treeview);
   if (model != NULL)
     gtk_tree_model_foreach (model, tm_delete_track, track);
 }
@@ -676,7 +742,7 @@
 /* Remove all tracks from the display model */
 void tm_remove_all_tracks ()
 {
-  GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+  GtkTreeModel *model = get_model (track_treeview);
   GtkTreeIter iter;
 
   while (gtk_tree_model_get_iter_first (model, &iter))
@@ -740,7 +806,7 @@
    iTunesDB is read and some IDs are renumbered */
 void tm_track_changed (Track *track)
 {
-  GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+  GtkTreeModel *model = get_model (track_treeview);
   /*  printf("tm_track_changed enter\n");*/
   if (model != NULL)
     gtk_tree_model_foreach (model, tm_model_track_changed, track);
@@ -1252,7 +1318,7 @@
     gint result = 0;
     GtkTreeModel *tm = NULL;
 
-    tm = gtk_tree_view_get_model (GTK_TREE_VIEW(track_treeview));
+    tm = get_model (GTK_TREE_VIEW(track_treeview));
     if (tm)
     {
        result = gtk_tree_model_iter_n_children (tm, NULL);
@@ -1290,7 +1356,7 @@
        gboolean changed = FALSE;
        iTunesDB *itdb = NULL;
 
-       tm = gtk_tree_view_get_model (track_treeview);
+       tm = get_model (track_treeview);
        g_return_if_fail (tm);
 
        valid = gtk_tree_model_get_iter_first (tm,&i);
@@ -1407,7 +1473,7 @@
     GList *result = NULL;
     GtkTreeModel *model;
 
-    if((model = gtk_tree_view_get_model (track_treeview)))
+    if((model = get_model (track_treeview)))
     {
        gtk_tree_model_foreach(model, on_all_trackids_list_foreach,
                               &result);
@@ -1463,7 +1529,7 @@
 tm_get_all_tracks(void)
 {
     GList *result = NULL;
-    GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+    GtkTreeModel *model = get_model (track_treeview);
 
     g_return_val_if_fail (model, NULL);
 
@@ -1790,7 +1856,7 @@
 {
     if (track_treeview)
     {
-       GtkTreeModel *model= gtk_tree_view_get_model (track_treeview);
+       GtkTreeModel *model= get_model (track_treeview);
 
        prefs_set_int("tm_sort", SORT_NONE);
        if (!BROKEN_GTK_TREE_SORT)
@@ -1966,7 +2032,7 @@
 {
     if (track_treeview)
     {
-       GtkTreeModel *model= gtk_tree_view_get_model (track_treeview);
+       GtkTreeModel *model= get_model (track_treeview);
        if (order != SORT_NONE)
        {
            gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
@@ -1996,7 +2062,7 @@
 /* Adds the columns to our track_treeview */
 static GtkTreeViewColumn *tm_add_column (TM_item tm_item, gint pos)
 {
-  GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+  GtkTreeModel *model = get_model (track_treeview);
   GtkTreeViewColumn *col = NULL;
   const gchar *text;
   GtkCellRenderer *renderer = NULL;  /* default */
@@ -2254,7 +2320,7 @@
   /* create tree view */
   if (track_treeview)
   {   /* delete old tree view */
-      model = gtk_tree_view_get_model (track_treeview);
+      model = get_model (track_treeview);
       /* FIXME: how to delete model? */
       gtk_widget_destroy (GTK_WIDGET (track_treeview));
   }
@@ -2444,7 +2510,7 @@
            if (prefs_get_int("tm_sort") != SORT_NONE)
            {
                /* Re-enable sorting */
-               GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+               GtkTreeModel *model = get_model (track_treeview);
                if (BROKEN_GTK_TREE_SORT)
                {
                    gtk_tree_sortable_set_sort_func (
@@ -2469,7 +2535,7 @@
            if (prefs_get_int("tm_sort") != SORT_NONE)
            {
                /* Disable sorting */
-               GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+               GtkTreeModel *model = get_model (track_treeview);
                if (BROKEN_GTK_TREE_SORT)
                {
                    gtk_tree_sortable_set_sort_func (
@@ -2499,7 +2565,7 @@
     GtkTreeModel *model;
     GtkTreeIter new_iter;
 
-    model = gtk_tree_view_get_model (track_treeview);
+    model = get_model (track_treeview);
 
 /*    printf("plitem: %p\n", plitem);
       if (plitem) printf("plitem->type: %d\n", plitem->type);*/
@@ -2543,7 +2609,7 @@
     g_return_val_if_fail (*data, FALSE);
     g_return_val_if_fail (current_playlist, FALSE);
 
-    model = gtk_tree_view_get_model (track_treeview);
+    model = get_model (track_treeview);
     g_return_val_if_fail (model, FALSE);
     if (path)
     {

Modified: gtkpod/trunk/src/help.c
===================================================================
--- gtkpod/trunk/src/help.c     2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/src/help.c     2008-01-03 14:38:30 UTC (rev 1908)
@@ -139,8 +139,11 @@
        GdkPixbuf *icon = gdk_pixbuf_new_from_file(PACKAGE_DATA_DIR 
G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "data" G_DIR_SEPARATOR_S 
"gtkpod-logo.png", NULL);
        
 #ifdef LIBGPOD_VERSION
-       gchar *description = g_strdup_printf (_("Cross-platform multilingual 
interface to Apple's iPod™\n"
-                                                                               
        "(using libgpod %s)"), LIBGPOD_VERSION);
+       gchar *version = g_strdup_printf (_("(using libgpod %s)"), 
LIBGPOD_VERSION);
+       gchar *description = g_strdup_printf ("%s\n%s", _("Cross-platform 
multilingual interface to Apple's iPod™"),
+                                                                               
        version);
+                                                                               
  
+       g_free (version);
 #else
        gchar *description = _("Cross-platform multilingual interface to 
Apple's iPod™");
 #endif

Modified: gtkpod/trunk/src/misc.c
===================================================================
--- gtkpod/trunk/src/misc.c     2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/src/misc.c     2008-01-03 14:38:30 UTC (rev 1908)
@@ -61,7 +61,61 @@
  *                                                                  *
 \*------------------------------------------------------------------*/
 
+/* Copied g_utf8_strcasestr from GtkSourceView */
+gchar *utf8_strcasestr (const gchar *haystack, const gchar *needle)
+{
+       gsize needle_len;
+       gsize haystack_len;
+       gchar *ret = NULL;
+       gchar *p;
+       gchar *casefold;
+       gchar *caseless_haystack;
+       gint i;
 
+       g_return_val_if_fail (haystack != NULL, NULL);
+       g_return_val_if_fail (needle != NULL, NULL);
+
+       casefold = g_utf8_casefold (haystack, -1);
+       caseless_haystack = g_utf8_normalize (casefold, -1, G_NORMALIZE_ALL);
+       g_free (casefold);
+
+       needle_len = g_utf8_strlen (needle, -1);
+       haystack_len = g_utf8_strlen (caseless_haystack, -1);
+
+       if (needle_len == 0)
+       {
+               ret = (gchar *)haystack;
+               goto finally_1;
+       }
+
+       if (haystack_len < needle_len)
+       {
+               ret = NULL;
+               goto finally_1;
+       }
+
+       p = (gchar*)caseless_haystack;
+       needle_len = strlen (needle);
+       i = 0;
+
+       while (*p)
+       {
+               if ((strncmp (p, needle, needle_len) == 0))
+               {
+                       ret = g_utf8_offset_to_pointer (haystack, i);
+                       goto finally_1;
+               }
+
+               p = g_utf8_next_char (p);
+               i++;
+       }
+
+finally_1:
+       g_free (caseless_haystack);
+
+       return ret;
+}
+
 /* Calculate the time in ms passed since @old_time. @old_time is
    updated with the current time if @update is TRUE*/
 float get_ms_since (GTimeVal *old_time, gboolean update)

Modified: gtkpod/trunk/src/misc.h
===================================================================
--- gtkpod/trunk/src/misc.h     2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/src/misc.h     2008-01-03 14:38:30 UTC (rev 1908)
@@ -75,25 +75,8 @@
 
 /* Some symbols not necessarily defined */
 
-/* Introduced in 2.6 */
-#ifndef GTK_STOCK_DISCONNECT
-#define GTK_STOCK_DISCONNECT GTK_STOCK_GOTO_TOP
-#define GTK_STOCK_CONNECT GTK_STOCK_GOTO_BOTTOM
-#endif
-#ifndef GTK_STOCK_EDIT
-#define GTK_STOCK_EDIT NULL
-#endif
-#ifndef G_IS_DIR_SEPARATOR
-#define G_IS_DIR_SEPARATOR(c) (c == G_DIR_SEPARATOR)
-#endif
-/* SEMIBOLD was introduced with version 2.8 */
-#ifndef PANGO_WEIGHT_SEMIBOLD
-#define PANGO_WEIGHT_SEMIBOLD 600
-#endif
+gchar *utf8_strcasestr (const gchar *haystack, const gchar *needle);
 
-
-
-
 gchar *get_user_string (gchar *title, gchar *message, gchar *dflt,
                        gchar *opt_msg, gboolean *opt_state, const gchar 
*accept_button);
 Playlist *add_new_pl_user_name (iTunesDB *itdb, gchar *dflt, gint32 pos);

Modified: gtkpod/trunk/src/prefs.c
===================================================================
--- gtkpod/trunk/src/prefs.c    2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/src/prefs.c    2008-01-03 14:38:30 UTC (rev 1908)
@@ -251,8 +251,8 @@
     prefs_set_int("mpl_autoselect", TRUE);
        
     /* Set window sizes */
-    prefs_set_int("size_gtkpod.x", 600);
-    prefs_set_int("size_gtkpod.y", 500);
+    prefs_set_int("size_gtkpod.x", 780);
+    prefs_set_int("size_gtkpod.y", 580);
     prefs_set_int("size_cal.x", 500);
     prefs_set_int("size_cal.y", 300);
     prefs_set_int("size_conf_sw.x", 300);

Modified: gtkpod/trunk/src/stock_icons.c
===================================================================
--- gtkpod/trunk/src/stock_icons.c      2008-01-03 10:21:48 UTC (rev 1907)
+++ gtkpod/trunk/src/stock_icons.c      2008-01-03 14:38:30 UTC (rev 1908)
@@ -105,7 +105,6 @@
        if (!path)
                path = g_build_filename (PACKAGE_DATA_DIR, PACKAGE, "icons", 
NULL);
 
-       printf ("Path: %s\n", path);
        gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), path);
        g_free (path);
        


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to