2012-04-01 [colin] 3.8.0cvs36
[claws.git] / src / addr_compl.c
index b2b89a53e535dd31c54f3d5d10ffc740a5f33bd9..16bfa248db66956ce8b282e4f3243e2a6e2de898 100644 (file)
@@ -35,8 +35,8 @@
 #  include <wctype.h>
 #endif
 
-#include "addrindex.h"
 #include "addr_compl.h"
+#include "addritem.h"
 #include "utils.h"
 #include "prefs_common.h"
 #include "claws.h"
 #include "gtkutils.h"
 #include <pthread.h>
 
+#ifndef USE_NEW_ADDRBOOK
+       #include "addrindex.h"
+#else
+       #include "addressbook-dbus.h"
+#endif
+
 /*!
  *\brief       For the GtkListStore
  */
@@ -286,8 +292,18 @@ static void read_address_book(gchar *folderpath) {
        free_all_addresses();
        free_completion_list();
 
+#ifndef USE_NEW_ADDRBOOK
        addrindex_load_completion( add_address, folderpath );
-
+#else
+       GError* error = NULL;
+       
+       addrcompl_initialize();
+       if (! addrindex_dbus_load_completion(add_address, &error)) {
+               g_warning("Failed to populate address completion list");
+        g_error_free(error);
+               return;
+       }
+#endif
        /* plugins may hook in here to modify/extend the completion list */
        hooks_invoke(ADDDRESS_COMPLETION_BUILD_ADDRESS_LIST_HOOKLIST, &g_address_list);
 
@@ -753,8 +769,9 @@ static CompletionWindow *addrcompl_create_window( void ) {
  */
 static void addrcompl_destroy_window( CompletionWindow *cw ) {
        /* Stop all searches currently in progress */
+#ifndef USE_NEW_ADDRBOOK
        addrindex_stop_search( _queryID_ );
-
+#endif
        /* Remove idler function... or application may not terminate */
        if( _completionIdleID_ != 0 ) {
                g_source_remove( _completionIdleID_ );
@@ -851,11 +868,18 @@ static void addrcompl_resize_window( CompletionWindow *cw ) {
        gtk_widget_size_request( cw->list_view, &r );
 
        /* Adjust window height to available screen space */
-       if( ( y + r.height ) > gdk_screen_height() ) {
-               gtk_window_set_resizable(GTK_WINDOW(cw->window), FALSE);
-               gtk_widget_set_size_request( cw->window, width, gdk_screen_height() - y );
-       } else
-               gtk_widget_set_size_request(cw->window, width, r.height);
+       if( y + r.height > gdk_screen_height())
+               r.height = gdk_screen_height() - y;
+
+       gtk_widget_set_size_request(cw->window, width, r.height);
+
+       gdk_pointer_grab(gtk_widget_get_window(cw->window), TRUE,
+                        GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK |
+                        GDK_BUTTON_RELEASE_MASK,
+                        NULL, NULL, GDK_CURRENT_TIME);
+       gdk_keyboard_grab(gtk_widget_get_window(cw->window), FALSE, GDK_CURRENT_TIME);
+       gtk_grab_add(cw->window);
+
 }
 
 static GdkPixbuf *group_pixbuf = NULL;
@@ -968,6 +992,7 @@ static gboolean addrcompl_idle( gpointer data ) {
  *                   criteria.
  * \param data       Query data.
  */
+#ifndef USE_NEW_ADDRBOOK
 static gint addrcompl_callback_entry(
        gpointer sender, gint queryID, GList *listEMail, gpointer data )
 {
@@ -993,6 +1018,7 @@ static gint addrcompl_callback_entry(
 
        return 0;
 }
+#endif
 
 /**
  * Clear the display queue.
@@ -1038,6 +1064,7 @@ static void addrcompl_load_local( void ) {
  * Start the search.
  */
 static void addrcompl_start_search( void ) {
+#ifndef USE_NEW_ADDRBOOK
        gchar *searchTerm;
 
        searchTerm = g_strdup( _compWindow_->searchTerm );
@@ -1046,6 +1073,7 @@ static void addrcompl_start_search( void ) {
        _queryID_ = addrindex_setup_search(
                searchTerm, NULL, addrcompl_callback_entry );
        g_free( searchTerm );
+#endif
        /* g_print( "addrcompl_start_search::queryID=%d\n", _queryID_ ); */
 
        /* Load local stuff */
@@ -1056,7 +1084,11 @@ static void addrcompl_start_search( void ) {
                g_idle_add( (GSourceFunc) addrcompl_idle, NULL );
        /* g_print( "addrindex_start_search::queryID=%d\n", _queryID_ ); */
 
+#ifndef USE_NEW_ADDRBOOK
        addrindex_start_search( _queryID_ );
+#else
+       
+#endif
 }
 
 /**
@@ -1370,13 +1402,8 @@ static void address_completion_create_completion_window( GtkEntry *entry_ )
                         GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK |
                         GDK_BUTTON_RELEASE_MASK,
                         NULL, NULL, GDK_CURRENT_TIME);
+       gdk_keyboard_grab(gtk_widget_get_window(window), FALSE, GDK_CURRENT_TIME);
        gtk_grab_add( window );
-
-       /* XXX: GTK2 too??? 
-        *
-        * GTK1: this gets rid of the irritating focus rectangle that doesn't
-        * follow the selection */
-       gtkut_widget_set_can_focus(list_view, FALSE);
 }
 
 /**