如何将项目添加到Pidgin菜单

我想在Pidgin菜单中添加任意项目。 让它成为好友→显示→群组 。 我希望它与自定义function关联的checkbutton(如好友→显示→空组 )。 我怎样才能做到这一点?

  • 在Pidgin 2.10.9中
  • 在Pidgin 3.0.0(开发分支)

以下示例适用于Pidgin版本2.10.9。 我相信3.0.0(当前开发分支)中没有太多变化,所以它也适用于那里,只需要很少的修改。

首先,下载Pidgin来源。 在Ubuntu中,只需运行即可完成

apt-get source pidgin 

这将获取libpurple,pidgin和finch源。 然后进入pidgin-2.10.9/pidgin/gtkblist.c找到该行

 static GtkItemFactoryEntry blist_menu[] = 

在那里你会看到文本中的Gtk菜单。 添加以下行:

 { N_("/Buddies/Show/_Groups"), NULL, pidgin_blist_show_groups_cb, 1, "", NULL }, 

 { N_("/Buddies/Show/_Empty Groups"), NULL, pidgin_blist_show_empty_groups_cb, 1, "", NULL }, 

您可以看到添加的行只是添加后的类似物。 第3个数组成员是负责更新菜单项状态的函数。

接下来,添加您刚刚指定的函数pidgin_blist_show_groups_cb 。 你可以找到pidgin_blist_show_empty_groups_cb并复制它的内容。

 static void pidgin_blist_show_groups_cb(gpointer data, guint action, GtkWidget *item) { pidgin_set_cursor(gtkblist->window, GDK_WATCH); purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/blist/show_groups", gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))); pidgin_clear_cursor(gtkblist->window); } 

此外,您需要在启动时设置项目状态。 找到function

 static void pidgin_blist_show(PurpleBuddyList *list) 

并添加

 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Groups"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_groups")); 

 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show/Empty Groups"))), purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_empty_groups")); 

添加首选项"/blist/show_groups"以及"/blist/show_groups"添加回调在如何将自定义首选项添加到Pidgin中进行了解释? 。 要测试您的更改,请编译并安装pidgin:

 sudo apt-get build-dep pidgin cd pidgin-2.10.9/ fakeroot debian/rules binary sudo dpkg -i ../pidgin_2.10.9-0ubuntu3.deb 

洋泾浜-3.0.0

Pidgin在3.0.0版本中生成菜单的方式有一些变化。 首先,有新的数组GtkToggleActionEntry blist_menu_toggle_entries[] 。 你需要在那里添加

 { "ShowGroups", NULL, N_("_Groups"), NULL, NULL, G_CALLBACK(pidgin_blist_show_groups_cb), FALSE }, 

 { "ShowEmptyGroups", NULL, N_("_Empty Groups"), NULL, NULL, G_CALLBACK(pidgin_blist_show_empty_groups_cb), FALSE }, 

并且,有static const char *blist_menu 。 你需要添加

 "" 

 "" 

然后按照此答案中的说明跳过第一个。