comparison src/gtklog.c @ 13434:ffd724befbf8

[gaim-migrate @ 15809] Cleanup the busy cursor handling code to eliminate a bunch of these loops: while (gtk_events_pending()) gtk_main_iteration(); They seem like a race condition waiting to happen. This code is also simpler, and more generic. This leaves only one such loop, in src/gtkblist.c's gaim_gtk_blist_expand_contact_cb(). committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Tue, 07 Mar 2006 05:48:54 +0000
parents 3de53fe8345f
children 6034444bbcf5
comparison
equal deleted inserted replaced
13433:7ef6a2d0d9da 13434:ffd724befbf8
85 85
86 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv) 86 static void search_cb(GtkWidget *button, GaimGtkLogViewer *lv)
87 { 87 {
88 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry)); 88 const char *search_term = gtk_entry_get_text(GTK_ENTRY(lv->entry));
89 GList *logs; 89 GList *logs;
90 GdkCursor *cursor;
91 90
92 if (lv->search != NULL) 91 if (lv->search != NULL)
93 g_free(lv->search); 92 g_free(lv->search);
94 93
95 gtk_tree_store_clear(lv->treestore); 94 gtk_tree_store_clear(lv->treestore);
101 return; 100 return;
102 } 101 }
103 102
104 lv->search = g_strdup(search_term); 103 lv->search = g_strdup(search_term);
105 104
106 cursor = gdk_cursor_new(GDK_WATCH); 105 gaim_gtk_set_cursor(lv->window, GDK_WATCH);
107 gdk_window_set_cursor(lv->window->window, cursor);
108 gdk_cursor_unref(cursor);
109 while (gtk_events_pending())
110 gtk_main_iteration();
111 106
112 for (logs = lv->logs; logs != NULL; logs = logs->next) { 107 for (logs = lv->logs; logs != NULL; logs = logs->next) {
113 char *read = gaim_log_read((GaimLog*)logs->data, NULL); 108 char *read = gaim_log_read((GaimLog*)logs->data, NULL);
114 if (read && *read && gaim_strcasestr(read, search_term)) { 109 if (read && *read && gaim_strcasestr(read, search_term)) {
115 GtkTreeIter iter; 110 GtkTreeIter iter;
121 1, log, -1); 116 1, log, -1);
122 } 117 }
123 g_free(read); 118 g_free(read);
124 } 119 }
125 120
126 gdk_window_set_cursor(lv->window->window, NULL); 121 gaim_gtk_clear_cursor(lv->window);
127 } 122 }
128 123
129 static gboolean destroy_cb(GtkWidget *w, gint resp, struct log_viewer_hash_t *ht) { 124 static gboolean destroy_cb(GtkWidget *w, gint resp, struct log_viewer_hash_t *ht) {
130 GaimGtkLogViewer *lv = syslog_viewer; 125 GaimGtkLogViewer *lv = syslog_viewer;
131 126
169 static void log_select_cb(GtkTreeSelection *sel, GaimGtkLogViewer *viewer) { 164 static void log_select_cb(GtkTreeSelection *sel, GaimGtkLogViewer *viewer) {
170 GtkTreeIter iter; 165 GtkTreeIter iter;
171 GValue val; 166 GValue val;
172 GtkTreeModel *model = GTK_TREE_MODEL(viewer->treestore); 167 GtkTreeModel *model = GTK_TREE_MODEL(viewer->treestore);
173 GaimLog *log = NULL; 168 GaimLog *log = NULL;
174 GdkCursor *cursor;
175 GaimLogReadFlags flags; 169 GaimLogReadFlags flags;
176 char *read = NULL; 170 char *read = NULL;
177 171
178 if (!gtk_tree_selection_get_selected(sel, &model, &iter)) 172 if (!gtk_tree_selection_get_selected(sel, &model, &iter))
179 return; 173 return;
184 g_value_unset(&val); 178 g_value_unset(&val);
185 179
186 if (log == NULL) 180 if (log == NULL)
187 return; 181 return;
188 182
189 /* When we set the initial log, this gets called and the window is still NULL. */ 183 gaim_gtk_set_cursor(viewer->window, GDK_WATCH);
190 if (viewer->window->window != NULL)
191 {
192 cursor = gdk_cursor_new(GDK_WATCH);
193 gdk_window_set_cursor(viewer->window->window, cursor);
194 gdk_cursor_unref(cursor);
195 while (gtk_events_pending())
196 gtk_main_iteration();
197 }
198 184
199 if (log->type != GAIM_LOG_SYSTEM) { 185 if (log->type != GAIM_LOG_SYSTEM) {
200 char *title; 186 char *title;
201 if (log->type == GAIM_LOG_CHAT) 187 if (log->type == GAIM_LOG_CHAT)
202 title = g_strdup_printf(_("<span size='larger' weight='bold'>Conversation in %s on %s</span>"), 188 title = g_strdup_printf(_("<span size='larger' weight='bold'>Conversation in %s on %s</span>"),
230 if (viewer->search != NULL) { 216 if (viewer->search != NULL) {
231 gtk_imhtml_search_clear(GTK_IMHTML(viewer->imhtml)); 217 gtk_imhtml_search_clear(GTK_IMHTML(viewer->imhtml));
232 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search); 218 gtk_imhtml_search_find(GTK_IMHTML(viewer->imhtml), viewer->search);
233 } 219 }
234 220
235 /* When we set the initial log, this gets called and the window is still NULL. */ 221 gaim_gtk_clear_cursor(viewer->window);
236 if (viewer->window->window != NULL)
237 gdk_window_set_cursor(viewer->window->window, NULL);
238 } 222 }
239 223
240 /* I want to make this smarter, but haven't come up with a cool algorithm to do so, yet. 224 /* I want to make this smarter, but haven't come up with a cool algorithm to do so, yet.
241 * I want the tree to be divided into groups like "Today," "Yesterday," "Last week," 225 * I want the tree to be divided into groups like "Today," "Yesterday," "Last week,"
242 * "August," "2002," etc. based on how many conversation took place in each subdivision. 226 * "August," "2002," etc. based on how many conversation took place in each subdivision.