Mercurial > pidgin
changeset 18331:d19a86daa7f8
merge of '3bc50b53735238c5650e94eb663e7b7d9623be2a'
and '8f87565428897d15a80d991762cfd9774d98e8ac'
author | Stu Tomlinson <stu@nosnilmot.com> |
---|---|
date | Thu, 28 Jun 2007 00:47:53 +0000 |
parents | df4ae80156d2 (diff) a6fa0249d7f7 (current diff) |
children | 1862a23b1751 efed8e3d5c61 |
files | |
diffstat | 2 files changed, 48 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/request.c Wed Jun 27 22:20:28 2007 +0000 +++ b/libpurple/request.c Thu Jun 28 00:47:53 2007 +0000 @@ -150,7 +150,8 @@ switch (purple_request_field_get_type(field)) { case PURPLE_REQUEST_FIELD_STRING: - if (purple_request_field_string_get_value(field) == NULL) + if (purple_request_field_string_get_value(field) == NULL || + *(purple_request_field_string_get_value(field)) == '\0') return FALSE; break;
--- a/pidgin/gtkconv.c Wed Jun 27 22:20:28 2007 +0000 +++ b/pidgin/gtkconv.c Thu Jun 28 00:47:53 2007 +0000 @@ -256,19 +256,11 @@ * negate it anyway. --luke */ if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { - if (w == gtkconv->imhtml) { - purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/im/default_width", allocation->width); - purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/im/default_height", allocation->height); - } if (w == gtkconv->lower_hbox) purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/im/entry_height", allocation->height); } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { - if (w == gtkconv->imhtml) { - purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_width", allocation->width); - purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_height", allocation->height); - } if (w == gtkconv->lower_hbox) purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/chat/entry_height", allocation->height); } @@ -4480,15 +4472,6 @@ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(imhtml_sw), imhtml_sw_hscroll, GTK_POLICY_ALWAYS); - gtk_widget_set_size_request(gtkconv->imhtml, - chat ? purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_width") : - purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_width"), - chat ? purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/default_height") : - purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_height")); - - g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", - G_CALLBACK(size_allocate_cb), gtkconv); - g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", G_CALLBACK(entry_stop_rclick_cb), NULL); g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", @@ -6211,8 +6194,9 @@ const char *topic = purple_conv_chat_get_topic(chat); markup = g_strdup_printf("%s%s<span color='%s' size='smaller'>%s</span>", purple_conversation_get_title(conv), + topic ? "\n" : "", pidgin_get_dim_grey_string(gtkconv->infopane), - topic ? "\n" : "", topic ? topic : ""); + topic ? topic : ""); } gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), TEXT_COLUMN, markup, -1); @@ -7074,6 +7058,8 @@ purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/tabs", TRUE); purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/tab_side", GTK_POS_TOP); purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/scrollback_lines", 4000); + purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/x", 0); + purple_prefs_add_int(PIDGIN_PREFS_ROOT "/conversations/y", 0); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font", TRUE); purple_prefs_add_string(PIDGIN_PREFS_ROOT "/conversations/custom_font", ""); @@ -8223,6 +8209,44 @@ regenerate_plugins_items(data); } +static gboolean gtk_conv_configure_cb(GtkWidget *w, GdkEventConfigure *event, gpointer data) { + int x, y; + + if (GTK_WIDGET_VISIBLE(w)) + gtk_window_get_position(GTK_WINDOW(w), &x, &y); + else + return FALSE; /* carry on normally */ + + /* Workaround for GTK+ bug # 169811 - "configure_event" is fired + * when the window is being maximized */ + if (gdk_window_get_state(w->window) & GDK_WINDOW_STATE_MAXIMIZED) + return FALSE; + + /* don't save if nothing changed */ + if (x == purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/x") && + y == purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/y") && + event->width == purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_width") && + event->height == purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/default_height")) + return FALSE; /* carry on normally */ + + /* don't save off-screen positioning */ + if (x + event->width < 0 || + y + event->height < 0 || + x > gdk_screen_width() || + y > gdk_screen_height()) + return FALSE; /* carry on normally */ + + /* store the position */ + purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/x", x); + purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/y", y); + purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/im/width", event->width); + purple_prefs_set_int(PIDGIN_PREFS_ROOT "/conversations/im/height", event->height); + + /* continue to handle event normally */ + return FALSE; + +} + PidginWindow * pidgin_conv_window_new() { @@ -8237,7 +8261,8 @@ /* Create the window. */ win->window = pidgin_create_window(NULL, 0, "conversation", TRUE); - GTK_WINDOW(win->window)->allow_shrink = TRUE; + gtk_window_set_default_size(GTK_WINDOW(win->window), purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/width"), + purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/im/height")); if (available_list == NULL) { create_icon_lists(win->window); @@ -8245,7 +8270,8 @@ g_signal_connect(G_OBJECT(win->window), "delete_event", G_CALLBACK(close_win_cb), win); - + g_signal_connect(G_OBJECT(win->window), "configure_event", + G_CALLBACK(gtk_conv_configure_cb), NULL); g_signal_connect(G_OBJECT(win->window), "focus_in_event", G_CALLBACK(focus_win_cb), win);