diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index 060a516..53211d3 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -892,7 +892,7 @@ void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWi // webkit section #ifdef WEBKIT_INCLUDE -void yon_ubl_browser_window_open(char *link, char *browser_window_name){ +GtkWidget *yon_ubl_browser_window_open(char *link, char *browser_window_name){ GtkWidget *browser=gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget *web_place=gtk_box_new(GTK_ORIENTATION_VERTICAL,0); GtkWidget *header=gtk_header_bar_new(); @@ -907,28 +907,35 @@ void yon_ubl_browser_window_open(char *link, char *browser_window_name){ webkit_web_view_load_uri(WEBKIT_WEB_VIEW(WebView),link); gtk_box_pack_start(GTK_BOX(web_place),WebView,1,1,0); gtk_widget_show_all(browser); + return browser; } #else -void yon_ubl_browser_window_open(char *link, char *browser_window_name){ +GtkWidget *yon_ubl_browser_window_open(char *link, char *browser_window_name){ char *user=getenv("SUDO_USER"); if (!user) user=getlogin(); char *command=yon_char_unite("sudo -u ",user," xdg-open ", link,NULL); yon_launch(command); + return NULL; } #endif // rmb menu section -gboolean on_rmb_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *window){ - if (self){}; - if (event->button==3){ +typedef int (*RmbCheck)(void*); - gtk_widget_show_all(window->menu); - gtk_menu_popup_at_pointer(GTK_MENU(window->menu),NULL); +gboolean on_rmb_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *window){ + int (*func)(void*) = (RmbCheck)(window->show_function); + if (func(window->show_data)){ + if (self){}; + if (event->button==3){ + + gtk_widget_show_all(window->menu); + gtk_menu_popup_at_pointer(GTK_MENU(window->menu),NULL); + return 0; + } return 0; } - return 0; } rmb_menu_window *yon_rmb_menu_new(){ @@ -940,9 +947,11 @@ rmb_menu_window *yon_rmb_menu_new(){ return window; } -rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, const char *button_label, const char *icon_name, GCallback function, gpointer data,...){ +rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (show_function)(void*), void *show_data, const char *button_label, const char *icon_name, GCallback function, gpointer data,...){ if (target_widget){ rmb_menu_window *window = yon_rmb_menu_new(); + window->show_function=(GCallback)show_function; + window->show_data=show_data; { GtkWidget *menu_item = gtk_menu_item_new(); GtkWidget *content_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); @@ -994,6 +1003,7 @@ rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, const char *button gtk_menu_shell_append(GTK_MENU_SHELL(window->menu),menu_item); } g_signal_connect(G_OBJECT(target_widget),"button-press-event",G_CALLBACK(on_rmb_menu_open),window); + return window; } } #endif \ No newline at end of file diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 9881ded..72625b1 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -411,7 +411,7 @@ void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWi * [RU] * Открывает встроенный браузер с именем [browser_window_name] и показываемой страницей по ссылке [link] */ -void yon_ubl_browser_window_open(char *link, char *browser_window_name); +GtkWidget *yon_ubl_browser_window_open(char *link, char *browser_window_name); #else /**yon_ubl_browser_window_open(char *link, char *browser_window_name) @@ -422,14 +422,16 @@ void yon_ubl_browser_window_open(char *link, char *browser_window_name); * Открывает браузер со страницей по ссылке [link] * [browser_window_name] не используется. Нужна для совместимости с webkit версией этой функции. */ -void yon_ubl_browser_window_open(char *link, char *browser_window_name); +GtkWidget *yon_ubl_browser_window_open(char *link, char *browser_window_name); #endif #endif // rmb menu section typedef struct { GtkWidget *menu; dictionary *buttons; + GCallback show_function; + void *show_data; } rmb_menu_window; -rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, const char *button_label, const char *icon_name, GCallback function, gpointer data,...); +rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (*show_function)(void*), void *show_data, const char *button_label, const char *icon_name, GCallback function, gpointer data,...); #endif \ No newline at end of file