将按钮添加到 运行 功能的 libnotify 通知
Add buttons to libnotify notifications that run functions
我需要将按钮添加到 libnotify 通知的底部,单击时 运行 起作用。我可以使按钮出现,但单击时它们不会 运行 功能。它根本没有给出错误消息。
程序调用 ./notifications "Title" "Body" "pathtoicon"
代码:
#include <libnotify/notify.h>
#include <iostream>
void callback_mute(NotifyNotification* n, char* action, gpointer user_data) {
std::cout << "Muting Program" << std::endl;
system("pkexec kernel-notify -am");
}
int main(int argc, char * argv[] ) {
GError *error = NULL;
notify_init("Basics");
NotifyNotification* n = notify_notification_new (argv[1],
argv[2],
argv[3]);
notify_notification_add_action (n,
"action_click",
"Mute",
NOTIFY_ACTION_CALLBACK(callback_mute),
NULL,
NULL);
notify_notification_set_timeout(n, 10000);
if (!notify_notification_show(n, 0)) {
std::cerr << "Notification failed" << std::endl;
return 1;
}
return 0;
}
任何帮助将不胜感激,谢谢!
您必须使用 GMainLoop
、"main event loop" 才能使回调函数起作用。 libnotify
使用这个循环来处理它的动作,没有它,它根本不会调用你期望的回调函数,因为没有任何处理它。
基本上在你的main
函数中,只需在开头添加一个GMainLoop *loop
然后loop = g_main_loop_new(nullptr, FALSE);
来初始化它,然后在最后添加g_main_loop_run(loop);
。你的程序应该 运行 和以前一样,但回调函数现在可以工作了。所以基本上:
int main(int argc, char **argv)
{
GMainLoop *loop;
loop = g_main_loop_new(nullptr, FALSE);
// ... do your stuff
g_main_loop_run(loop);
return 0;
}
您可以在以下位置阅读更多相关信息:The Main Event Loop: GLib Reference Manual
您不必包含 glib.h
,因为 libnotify
无论如何都会包含它。
我需要将按钮添加到 libnotify 通知的底部,单击时 运行 起作用。我可以使按钮出现,但单击时它们不会 运行 功能。它根本没有给出错误消息。
程序调用 ./notifications "Title" "Body" "pathtoicon"
代码:
#include <libnotify/notify.h>
#include <iostream>
void callback_mute(NotifyNotification* n, char* action, gpointer user_data) {
std::cout << "Muting Program" << std::endl;
system("pkexec kernel-notify -am");
}
int main(int argc, char * argv[] ) {
GError *error = NULL;
notify_init("Basics");
NotifyNotification* n = notify_notification_new (argv[1],
argv[2],
argv[3]);
notify_notification_add_action (n,
"action_click",
"Mute",
NOTIFY_ACTION_CALLBACK(callback_mute),
NULL,
NULL);
notify_notification_set_timeout(n, 10000);
if (!notify_notification_show(n, 0)) {
std::cerr << "Notification failed" << std::endl;
return 1;
}
return 0;
}
任何帮助将不胜感激,谢谢!
您必须使用 GMainLoop
、"main event loop" 才能使回调函数起作用。 libnotify
使用这个循环来处理它的动作,没有它,它根本不会调用你期望的回调函数,因为没有任何处理它。
基本上在你的main
函数中,只需在开头添加一个GMainLoop *loop
然后loop = g_main_loop_new(nullptr, FALSE);
来初始化它,然后在最后添加g_main_loop_run(loop);
。你的程序应该 运行 和以前一样,但回调函数现在可以工作了。所以基本上:
int main(int argc, char **argv)
{
GMainLoop *loop;
loop = g_main_loop_new(nullptr, FALSE);
// ... do your stuff
g_main_loop_run(loop);
return 0;
}
您可以在以下位置阅读更多相关信息:The Main Event Loop: GLib Reference Manual
您不必包含 glib.h
,因为 libnotify
无论如何都会包含它。