{
completion_entry *ce1;
ce1 = g_new0(completion_entry, 1),
- ce1->string = g_strdup(str);
+ ce1->string = g_utf8_strdown(str, -1);
/* GCompletion list is case sensitive */
g_strdown(ce1->string);
ce1->ref = ae;
*/
static gchar *get_address_from_edit(GtkEntry *entry, gint *start_pos)
{
- const gchar *edit_text;
+ const gchar *edit_text, *p;
gint cur_pos;
- wchar_t *wtext;
- wchar_t *wp;
- wchar_t rfc_mail_sep;
- wchar_t quote;
- wchar_t lt;
- wchar_t gt;
gboolean in_quote = FALSE;
gboolean in_bracket = FALSE;
gchar *str;
- if (mbtowc(&rfc_mail_sep, ",", 1) < 0) return NULL;
- if (mbtowc("e, "\"", 1) < 0) return NULL;
- if (mbtowc(<, "<", 1) < 0) return NULL;
- if (mbtowc(>, ">", 1) < 0) return NULL;
-
edit_text = gtk_entry_get_text(entry);
if (edit_text == NULL) return NULL;
- wtext = strdup_mbstowcs(edit_text);
- g_return_val_if_fail(wtext != NULL, NULL);
-
cur_pos = gtk_editable_get_position(GTK_EDITABLE(entry));
/* scan for a separator. doesn't matter if walk points at null byte. */
- for (wp = wtext + cur_pos; wp > wtext; wp--) {
- if (*wp == quote)
- in_quote ^= TRUE;
- else if (!in_quote) {
- if (!in_bracket && *wp == rfc_mail_sep)
+ for (p = g_utf8_offset_to_pointer(edit_text, cur_pos);
+ p > edit_text;
+ p = g_utf8_prev_char(p)) {
+ if (*p == '"') {
+ in_quote = TRUE;
+ } else if (!in_quote) {
+ if (!in_bracket && *p == ',') {
break;
- else if (*wp == gt)
+ } else if (*p == '<')
in_bracket = TRUE;
- else if (*wp == lt)
+ else if (*p == '>')
in_bracket = FALSE;
}
}
/* have something valid */
- if (wcslen(wp) == 0) {
- g_free(wtext);
+ if (g_utf8_strlen(p, -1) == 0)
return NULL;
- }
#define IS_VALID_CHAR(x) \
- (iswalnum(x) || (x) == quote || (x) == lt || ((x) > 0x7f))
+ (isalnum(x) || (x) == '"' || (x) == '<' || (((unsigned char)(x)) > 0x7f))
/* now scan back until we hit a valid character */
- for (; *wp && !IS_VALID_CHAR(*wp); wp++)
+ for (; *p && !IS_VALID_CHAR(*p); p = g_utf8_next_char(p))
;
#undef IS_VALID_CHAR
- if (wcslen(wp) == 0) {
- g_free(wtext);
+ if (g_utf8_strlen(p, -1) == 0)
return NULL;
- }
- if (start_pos) *start_pos = wp - wtext;
+ if (start_pos) *start_pos = g_utf8_pointer_to_offset(edit_text, p);
- str = strdup_wcstombs(wp);
- g_free(wtext);
+ str = g_strdup(p);
return str;
}
g_return_val_if_fail(str != NULL, 0);
- Xstrdup_a(d, str, return 0);
+ /* g_completion is case sensitive */
+ d = g_utf8_strdown(str, -1);
clear_completion_cache();
g_completion_prefix = g_strdup(str);
- /* g_completion is case sensitive */
- g_strdown(d);
result = g_completion_complete(g_completion, d, NULL);
count = g_list_length(result);
}
g_completion_count = count;
+
+ g_free(d);
+
return count;
}
/**
* Completion idle ID.
*/
-static gint _completionIdleID_ = 0;
+static guint _completionIdleID_ = 0;
/*
* address completion entry ui. the ui (completion list was inspired by galeon's
gdk_window_get_geometry( cw->window->window, &x, &y, &width, &height, &depth );
gtk_widget_size_request( cw->clist, &r );
- gtk_widget_set_usize( cw->window, width, r.height );
+ gtk_widget_set_size_request( cw->window, width, r.height );
gtk_widget_show_all( cw->window );
gtk_widget_size_request( cw->clist, &r );
/* Adjust window height to available screen space */
if( ( y + r.height ) > gdk_screen_height() ) {
gtk_window_set_policy( GTK_WINDOW( cw->window ), TRUE, FALSE, FALSE );
- gtk_widget_set_usize( cw->window, width, gdk_screen_height() - y );
+ gtk_widget_set_size_request( cw->window, width, gdk_screen_height() - y );
}
}
/* printf( "addrcompl_callback::queryID=%d\n", queryID ); */
pthread_mutex_lock( & _completionMutex_ );
- if( queryID == _queryID_ ) {
- /* Append contents to end of display queue */
- node = listEMail;
- while( node ) {
- ItemEMail *email = node->data;
- if( target ) {
+ if( target ) {
+ if( queryID == _queryID_ ) {
+ /* Append contents to end of display queue */
+ node = listEMail;
+ while( node ) {
+ ItemEMail *email = node->data;
+
address = addritem_format_email( email );
/* printf( "\temail/address ::%s::\n", address ); */
_displayQueue_ = g_list_append( _displayQueue_, address );
+ node = g_list_next( node );
}
- node = g_list_next( node );
}
}
pthread_mutex_unlock( & _completionMutex_ );
/* Move focus to next widget */
parent = GTK_WIDGET(entry)->parent;
if( parent ) {
- gtk_container_focus( GTK_CONTAINER(parent), GTK_DIR_TAB_FORWARD );
+ gtk_widget_child_focus( parent, GTK_DIR_TAB_FORWARD );
}
}
start_address_completion();
/* register focus change hook */
- gtk_signal_connect(GTK_OBJECT(mainwindow), "set_focus",
- GTK_SIGNAL_FUNC(address_completion_mainwindow_set_focus),
- mainwindow);
+ g_signal_connect(G_OBJECT(mainwindow), "set_focus",
+ G_CALLBACK(address_completion_mainwindow_set_focus),
+ mainwindow);
}
/**
g_return_if_fail(GTK_IS_ENTRY(entry));
/* add hooked property */
- gtk_object_set_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK, entry);
+ g_object_set_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK, entry);
/* add keypress event */
- gtk_signal_connect_full(GTK_OBJECT(entry), "key_press_event",
- GTK_SIGNAL_FUNC(address_completion_entry_key_pressed),
- NULL,
+ g_signal_connect_closure
+ (GTK_OBJECT(entry), "key_press_event",
+ g_cclosure_new(G_CALLBACK(address_completion_entry_key_pressed),
COMPLETION_UNIQUE_DATA,
- NULL,
- 0,
- 0); /* magic */
+ NULL),
+ FALSE); /* magic */
}
/**
g_return_if_fail(entry != NULL);
g_return_if_fail(GTK_IS_ENTRY(entry));
- entry_obj = gtk_object_get_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK);
+ entry_obj = g_object_get_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK);
g_return_if_fail(entry_obj);
g_return_if_fail(entry_obj == GTK_OBJECT(entry));
/* has the hooked property? */
- gtk_object_set_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK, NULL);
+ g_object_set_data(G_OBJECT(entry), ENTRY_DATA_TAB_HOOK, NULL);
/* remove the hook */
- gtk_signal_disconnect_by_func(GTK_OBJECT(entry),
- GTK_SIGNAL_FUNC(address_completion_entry_key_pressed),
- COMPLETION_UNIQUE_DATA);
+ g_signal_handlers_disconnect_by_func(G_OBJECT(entry),
+ G_CALLBACK(address_completion_entry_key_pressed),
+ COMPLETION_UNIQUE_DATA);
}
/**
GtkWidget *widget,
gpointer data)
{
- if (widget)
+
+ if (widget && GTK_IS_ENTRY(widget) &&
+ g_object_get_data(G_OBJECT(widget), ENTRY_DATA_TAB_HOOK)) {
clear_completion_cache();
+ }
}
/**
* reported by the system. */
ev->keyval = GDK_AudibleBell_Enable;
ev->state &= ~GDK_SHIFT_MASK;
- gtk_signal_emit_stop_by_name(GTK_OBJECT(entry),
- "key_press_event");
/* Create window */
address_completion_create_completion_window(entry);
/* Start remote queries */
addrcompl_start_search();
+
+ return TRUE;
}
else {
/* old behaviour */
} else
clear_completion_cache();
- return TRUE;
+ return FALSE;
}
/**
* Initialize search term for address completion.
gdk_window_get_geometry(entry->window, &x, &y, &width, &height, &depth);
gdk_window_get_deskrelative_origin (entry->window, &x, &y);
y += height;
- gtk_widget_set_uposition(window, x, y);
+ gtk_window_move(GTK_WINDOW(window), x, y);
/* Resize window to fit initial (empty) address list */
gtk_widget_size_request( clist, &r );
- gtk_widget_set_usize( window, width, r.height );
+ gtk_widget_set_size_request( window, width, r.height );
gtk_widget_show_all( window );
gtk_widget_size_request( clist, &r );
/* Setup handlers */
- gtk_signal_connect(GTK_OBJECT(clist), "select_row",
- GTK_SIGNAL_FUNC(completion_window_select_row),
- _compWindow_ );
- gtk_signal_connect(GTK_OBJECT(window),
- "button-press-event",
- GTK_SIGNAL_FUNC(completion_window_button_press),
- _compWindow_ );
- gtk_signal_connect(GTK_OBJECT(window),
- "key-press-event",
- GTK_SIGNAL_FUNC(completion_window_key_press),
- _compWindow_ );
+ g_signal_connect(G_OBJECT(clist), "select_row",
+ G_CALLBACK(completion_window_select_row),
+ _compWindow_ );
+ g_signal_connect(G_OBJECT(window),
+ "button-press-event",
+ G_CALLBACK(completion_window_button_press),
+ _compWindow_ );
+ g_signal_connect(G_OBJECT(window),
+ "key-press-event",
+ G_CALLBACK(completion_window_key_press),
+ _compWindow_ );
gdk_pointer_grab(window->window, TRUE,
GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK,
/* Move focus to next widget */
if( parent ) {
- gtk_container_focus( GTK_CONTAINER(parent), GTK_DIR_TAB_FORWARD );
+ gtk_widget_child_focus( parent, GTK_DIR_TAB_FORWARD );
}
return FALSE;
}
/* Move focus to previous widget */
if( parent ) {
- gtk_container_focus( GTK_CONTAINER(parent), GTK_DIR_TAB_BACKWARD );
+ gtk_widget_child_focus( parent, GTK_DIR_TAB_BACKWARD );
}
return FALSE;
}