c-如何将项目添加到Pidgin菜单中



我想在Pidgin菜单中添加任意项目。就这样吧兄弟们→显示→分组。我希望它是checkbutton(就像Buddies→显示→空组(,并关联自定义功能。我该怎么做?

  • 洋泾浜2.10.9
  • 在Pidgin 3.0.0(开发分支(

以下示例适用于Pidgin版本2.10.9。我相信3.0.0(当前的开发分支(中没有太多的更改,所以它也将适用于那里,只需进行最小的修改

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

apt-get source pidgin

它将获取libpurple、洋泾浜和finch的来源。然后进入pidgin-2.10.9/pidgin/gtkblist.c并找到行

static GtkItemFactoryEntry blist_menu[] =

在那里,您将看到Gtk菜单的文本。添加以下行:

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

之后

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

您可以看到,添加的行只是添加后的行的模拟。第三个数组成员是负责更新菜单项状态的功能。

接下来,添加刚才指定的函数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);
}

此外,您还需要在启动时设置项目状态。查找功能

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"));

如何将自定义首选项添加到Pidgin?中解释了添加首选项"/blist/show_groups"以及向其添加回调?。要测试您的更改,请编译并安装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

Pidgin-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。您需要添加

"<menuitem action='ShowGroups'/>"

之后

"<menuitem action='ShowEmptyGroups'/>"

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

相关内容

  • 没有找到相关文章

最新更新