static gboolean check_timeout(gpointer data) { gint count = check_mail(); PurpleBuddyList *list = purple_get_blist(); if (count == -1) return FALSE; if (!list || !PURPLE_IS_GTK_BLIST(list) || !(PIDGIN_BLIST(list)->vbox)) return TRUE; if (!mail) { /* guess we better build it then :P */ GtkWidget *vbox = PIDGIN_BLIST(list)->vbox; mail = gtk_label_new("No mail messages."); gtk_box_pack_start(GTK_BOX(vbox), mail, FALSE, FALSE, 0); gtk_box_reorder_child(GTK_BOX(vbox), mail, 1); g_signal_connect(G_OBJECT(mail), "destroy", G_CALLBACK(destroy_cb), NULL); gtk_widget_show(mail); } if (count & NEW_MAIL) purple_sound_play_event(PURPLE_SOUND_POUNCE_DEFAULT, NULL); if (count & UNREAD_MAIL) gtk_label_set_text(GTK_LABEL(mail), "You have new mail!"); else if (count & ANY_MAIL) gtk_label_set_text(GTK_LABEL(mail), "You have mail."); else gtk_label_set_text(GTK_LABEL(mail), "No mail messages."); return TRUE; }
static void blist_create_cb(PurpleBuddyList *purple_blist, void *data) { purple_debug_info(WINPREFS_PLUGIN_ID, "buddy list created\n"); blist = PIDGIN_BLIST(purple_blist)->window; if(purple_prefs_get_bool(PREF_DBLIST_DOCKABLE)) { blist_set_dockable(TRUE); if(purple_prefs_get_bool(PREF_DBLIST_DOCKED)) { blist_ab->undocked_height = purple_prefs_get_int(PREF_DBLIST_HEIGHT); if(!(gdk_window_get_state(gtk_widget_get_window(blist)) & GDK_WINDOW_STATE_WITHDRAWN)) { gtk_appbar_dock(blist_ab, purple_prefs_get_int(PREF_DBLIST_SIDE)); if(purple_prefs_get_int(PREF_BLIST_ON_TOP) == BLIST_TOP_DOCKED) blist_set_ontop(TRUE); } else { g_idle_add(listen_for_blist_visible_cb, NULL); } } } if(purple_prefs_get_int(PREF_BLIST_ON_TOP) == BLIST_TOP_ALWAYS) blist_set_ontop(TRUE); }
static gboolean plugin_load(PurplePlugin *plugin) { PurpleBuddyList *buddy_list; void *conv_handle; if (cc_init_gtk_gl()) return FALSE; cc_init(&cc_info); buddy_list = purple_get_blist(); if (buddy_list) { purple_signal_connect(PIDGIN_BLIST (buddy_list), "drawing-menu", plugin, PURPLE_CALLBACK(cc_buddy_menu), NULL); conv_handle = purple_conversations_get_handle(); purple_signal_connect(conv_handle, "received-im-msg", plugin, PURPLE_CALLBACK(receive_im_cb), &cc_info); purple_signal_connect(conv_handle, "displaying-im-msg", plugin, PURPLE_CALLBACK(display_im_cb), &cc_info); } else { purple_signal_connect (purple_connections_get_handle(), "signed-on", plugin, PURPLE_CALLBACK(cc_signed_on), plugin); } Debug("CrazyChat plugin loaded.\n"); return TRUE; }
static gboolean plugin_load(PurplePlugin *plugin, GError **error) { purple_prefs_add_none("/plugins/gtk"); purple_prefs_add_none("/plugins/gtk/win32"); purple_prefs_add_none("/plugins/gtk/win32/winprefs"); purple_prefs_add_bool(PREF_DBLIST_DOCKABLE, FALSE); purple_prefs_add_bool(PREF_DBLIST_DOCKED, FALSE); purple_prefs_add_int(PREF_DBLIST_HEIGHT, 0); purple_prefs_add_int(PREF_DBLIST_SIDE, 0); /* Convert old preferences */ if(purple_prefs_exists(PREF_DBLIST_ON_TOP)) { gint blist_top = BLIST_TOP_NEVER; if(purple_prefs_get_bool(PREF_BLIST_ON_TOP)) blist_top = BLIST_TOP_ALWAYS; else if(purple_prefs_get_bool(PREF_DBLIST_ON_TOP)) blist_top = BLIST_TOP_DOCKED; purple_prefs_remove(PREF_BLIST_ON_TOP); purple_prefs_remove(PREF_DBLIST_ON_TOP); purple_prefs_add_int(PREF_BLIST_ON_TOP, blist_top); } else purple_prefs_add_int(PREF_BLIST_ON_TOP, BLIST_TOP_NEVER); purple_prefs_remove(PREF_CHAT_BLINK); handle = plugin; /* blist docking init */ if(purple_blist_get_buddy_list() && PIDGIN_BLIST(purple_blist_get_buddy_list()) && PIDGIN_BLIST(purple_blist_get_buddy_list())->window) { blist_create_cb(purple_blist_get_buddy_list(), NULL); } /* This really shouldn't happen anymore generally, but if for some strange reason, the blist is recreated, we need to set it up again. */ purple_signal_connect(pidgin_blist_get_handle(), "gtkblist-created", plugin, PURPLE_CALLBACK(blist_create_cb), NULL); purple_signal_connect((void*)purple_get_core(), "quitting", plugin, PURPLE_CALLBACK(purple_quit_cb), NULL); purple_prefs_connect_callback(handle, PREF_BLIST_ON_TOP, winprefs_set_blist_ontop, NULL); purple_prefs_connect_callback(handle, PREF_DBLIST_DOCKABLE, winprefs_set_blist_dockable, NULL); return TRUE; }
static void signoff_cb(PurpleConnection *gc) { PurpleBuddyList *list = purple_get_blist(); if ((!list || !PURPLE_IS_GTK_BLIST(list) || !PIDGIN_BLIST(list)->vbox) && timer) { g_source_remove(timer); timer = 0; } }
static gboolean plugin_load(PurplePlugin *plugin) { handle = plugin; /* blist docking init */ if(purple_get_blist() && PIDGIN_BLIST(purple_get_blist()) && PIDGIN_BLIST(purple_get_blist())->window) { blist_create_cb(purple_get_blist(), NULL); } /* This really shouldn't happen anymore generally, but if for some strange reason, the blist is recreated, we need to set it up again. */ purple_signal_connect(pidgin_blist_get_handle(), "gtkblist-created", plugin, PURPLE_CALLBACK(blist_create_cb), NULL); purple_signal_connect((void*)purple_get_core(), "quitting", plugin, PURPLE_CALLBACK(purple_quit_cb), NULL); purple_prefs_connect_callback(handle, PREF_BLIST_ON_TOP, winprefs_set_blist_ontop, NULL); purple_prefs_connect_callback(handle, PREF_DBLIST_DOCKABLE, winprefs_set_blist_dockable, NULL); return TRUE; }
/************************************************************************************************** Buddy list was created **************************************************************************************************/ static void hmb_blist_created_cb(PurpleBuddyList *blist) { PidginBuddyList *gtkblist = PIDGIN_BLIST(blist); GdkWindow *root = gtk_widget_get_toplevel(GTK_WIDGET(gtkblist->window))->window; // set keygrabber if needed if (g_object_get_data((GObject *) root, "filter_set") == NULL) { gdk_window_add_filter(root, hmb_key_press_blist, 0); g_object_set_data((GObject *) root, "filter_set", "1"); } // hide menubar hmb_toggle_menubar(gtkblist, NULL); }
static gboolean plugin_unload(PurplePlugin *plugin) { void *conv_handle; struct crazychat *extra; assert(plugin); extra = (struct crazychat*) plugin->info->extra_info; cc_destroy(extra); conv_handle = purple_conversations_get_handle(); purple_signal_disconnect(PIDGIN_BLIST (purple_get_blist()), "drawing-menu", plugin, PURPLE_CALLBACK(cc_buddy_menu)); purple_signal_disconnect(conv_handle, "received-im", plugin, PURPLE_CALLBACK(receive_im_cb)); purple_signal_disconnect(conv_handle, "displaying-im-msg", plugin, PURPLE_CALLBACK(display_im_cb)); Debug("CrazyChat plugin unloaded.\n"); return TRUE; }
static gboolean cc_signed_on(PurpleConnection *gc, void *plugin) { struct crazychat *extra; void *conv_handle; assert(plugin); extra = (struct crazychat*)((PurplePlugin*)plugin)->info->extra_info; purple_signal_disconnect (purple_connections_get_handle(), "signed-on", plugin, PURPLE_CALLBACK(cc_signed_on)); purple_signal_connect(PIDGIN_BLIST (purple_get_blist()), "drawing-menu", plugin, PURPLE_CALLBACK(cc_buddy_menu), NULL); conv_handle = purple_conversations_get_handle(); purple_signal_connect(conv_handle, "received-im-msg", plugin, PURPLE_CALLBACK(receive_im_cb), extra); purple_signal_connect(conv_handle, "displaying-im-msg", plugin, PURPLE_CALLBACK(display_im_cb), extra); return FALSE; }
static gboolean plugin_load(PurplePlugin *plugin) { PurpleBuddyList *list = purple_get_blist(); void *conn_handle = purple_connections_get_handle(); if (!check_timeout(NULL)) { purple_debug_warning("mailchk", "Could not read $MAIL or /var/spool/mail/$USER\n"); return FALSE; } if (list && PURPLE_IS_GTK_BLIST(list) && PIDGIN_BLIST(list)->vbox) timer = g_timeout_add(2000, check_timeout, NULL); purple_signal_connect(conn_handle, "signed-on", plugin, PURPLE_CALLBACK(signon_cb), NULL); purple_signal_connect(conn_handle, "signed-off", plugin, PURPLE_CALLBACK(signoff_cb), NULL); return TRUE; }
static void blist_set_ontop(gboolean val) { if(!blist) return; gtk_window_set_keep_above(GTK_WINDOW(PIDGIN_BLIST(purple_blist_get_buddy_list())->window), val); }
static void sort_method_ext_blist_sort( PurpleBlistNode *node, PurpleBuddyList *blist, GtkTreeIter group, GtkTreeIter *cur, GtkTreeIter *ret ) { GtkTreeIter tmp_iter; PidginBuddyList *gtkblist; gtkblist = PIDGIN_BLIST(purple_get_blist()); if(!PURPLE_BLIST_NODE_IS_CONTACT(node) && !PURPLE_BLIST_NODE_IS_CHAT(node)) { sort_method_none(node, blist, group, cur, ret); return; } /* Get first child of group. Insert immediately if group is empty. */ if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &tmp_iter, &group)) { gtk_tree_store_insert(gtkblist->treemodel, ret, &group, 0); return; } /* Go trough all children */ do { GValue val; PurpleBlistNode *n; gint cmp1, cmp2, cmp3; /* Retrieve a BlistNode from a TreeModelNode */ val.g_type=0; gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &tmp_iter, NODE_COLUMN, &val); n = g_value_get_pointer(&val); /* Comparing... */ cmp1 = compare( purple_prefs_get_int(PLUGIN_PREFS_PREFIX "/sort1"), purple_prefs_get_bool(PLUGIN_PREFS_PREFIX "/sort1_reverse"), node, n ); cmp2 = compare( purple_prefs_get_int(PLUGIN_PREFS_PREFIX "/sort2"), purple_prefs_get_bool(PLUGIN_PREFS_PREFIX "/sort2_reverse"), node, n ); cmp3 = compare( purple_prefs_get_int(PLUGIN_PREFS_PREFIX "/sort3"), purple_prefs_get_bool(PLUGIN_PREFS_PREFIX "/sort3_reverse"), node, n ); /* Insert node before the current? */ /* TODO: refactor */ if(cmp1 < 0 || (cmp1 == 0 && (cmp2 < 0 || (cmp2 == 0 && (cmp3 < 0 || (cmp3 == 0 && node < n)))))) { if(cur == NULL) { gtk_tree_store_insert_before(gtkblist->treemodel, ret, &group, &tmp_iter); } else { gtk_tree_store_move_before(gtkblist->treemodel, cur, &tmp_iter); *ret = *cur; } return; } g_value_unset(&val); /* Get next node */ } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(gtkblist->treemodel), &tmp_iter)); /* Insert at the end */ if(cur == NULL) { gtk_tree_store_append(gtkblist->treemodel, ret, &group); } else { gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); *ret = *cur; } return; }
/** * A callback for when a Buddy List is created to merge a conv window with it * * @param[in] blist The Buddy List that was created **/ static void gtkblist_created_cb(U PurpleBuddyList *blist) { pwm_merge_conversation(PIDGIN_BLIST(blist)); }