| File: | cafe-panel/panel-context-menu.c |
| Warning: | line 304, column 10 Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* |
| 2 | * panel-context-menu.c: context menu for the panels |
| 3 | * |
| 4 | * Copyright (C) 2004 Vincent Untz |
| 5 | * |
| 6 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License as |
| 8 | * published by the Free Software Foundation; either version 2 of the |
| 9 | * License, or (at your option) any later version. |
| 10 | * |
| 11 | * This program is distributed in the hope that it will be useful, but |
| 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 14 | * General Public License for more details. |
| 15 | * |
| 16 | * You should have received a copy of the GNU General Public License |
| 17 | * along with this program; if not, write to the Free Software |
| 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
| 19 | * 02110-1301, USA. |
| 20 | * |
| 21 | * Most of the original code come from menu.c |
| 22 | * |
| 23 | * Authors: |
| 24 | * Vincent Untz <vincent@vuntz.net> |
| 25 | * |
| 26 | */ |
| 27 | |
| 28 | #include <config.h> |
| 29 | |
| 30 | #include "panel-context-menu.h" |
| 31 | |
| 32 | #include <string.h> |
| 33 | |
| 34 | #include <glib/gi18n.h> |
| 35 | #include <cdk/cdkkeysyms.h> |
| 36 | |
| 37 | #include <libpanel-util/panel-error.h> |
| 38 | #include <libpanel-util/panel-show.h> |
| 39 | #include <libpanel-util/panel-ctk.h> |
| 40 | |
| 41 | #include "panel-util.h" |
| 42 | #include "panel.h" |
| 43 | #include "menu.h" |
| 44 | #include "applet.h" |
| 45 | #include "panel-config-global.h" |
| 46 | #include "panel-profile.h" |
| 47 | #include "panel-properties-dialog.h" |
| 48 | #include "panel-lockdown.h" |
| 49 | #include "panel-addto.h" |
| 50 | #include "panel-icon-names.h" |
| 51 | #include "panel-reset.h" |
| 52 | |
| 53 | static void |
| 54 | panel_context_menu_show_help (CtkWidget *w, |
| 55 | gpointer data G_GNUC_UNUSED__attribute__ ((__unused__))) |
| 56 | { |
| 57 | panel_show_help (ctk_widget_get_screen (w), |
| 58 | "cafe-user-guide", "gospanel-1", NULL((void*)0)); |
| 59 | } |
| 60 | |
| 61 | static void |
| 62 | panel_context_menu_show_about_dialog (CtkWidget *menuitem) |
| 63 | { |
| 64 | static CtkWidget *about = NULL((void*)0); |
| 65 | char *authors [] = { |
| 66 | /* CAFE */ |
| 67 | "Perberos <perberos@gmail.com>", |
| 68 | "Stefano Karapetsas <stefano@karapetsas.com>", |
| 69 | "Steve Zesch <stevezesch2@gmail.com>", |
| 70 | /* GNOME */ |
| 71 | "Alex Larsson <alexl@redhat.com>", |
| 72 | "Anders Carlsson <andersca@gnu.org>", |
| 73 | "Arvind Samptur <arvind.samptur@wipro.com>", |
| 74 | "Darin Adler <darin@bentspoon.com>", |
| 75 | "Elliot Lee <sopwith@redhat.com>", |
| 76 | "Federico Mena <quartic@gimp.org>", |
| 77 | "George Lebl <jirka@5z.com>", |
| 78 | "Glynn Foster <glynn.foster@sun.com>", |
| 79 | "Ian Main <imain@ctk.org>", |
| 80 | "Ian McKellar <yakk@yakk.net>", |
| 81 | "Jacob Berkman <jberkman@andrew.cmu.edu>", |
| 82 | "Mark McLoughlin <mark@skynet.ie>", |
| 83 | "Martin Baulig <baulig@suse.de>", |
| 84 | "Miguel de Icaza <miguel@kernel.org>", |
| 85 | "Owen Taylor <otaylor@redhat.com>", |
| 86 | "Padraig O'Briain <padraig.obriain@sun.com>", |
| 87 | "Seth Nickell <snickell@stanford.edu>", |
| 88 | "Stephen Browne <stephen.browne@sun.com>", |
| 89 | "Tom Tromey <tromey@cygnus.com>", |
| 90 | "Vincent Untz <vuntz@gnome.org>", |
| 91 | N_("And many, many others…")("And many, many others…"), |
| 92 | NULL((void*)0) |
| 93 | }; |
| 94 | char *documenters[] = { |
| 95 | "Alexander Kirillov <kirillov@math.sunysb.edu>", |
| 96 | "Dan Mueth <d-mueth@uchicago.edu>", |
| 97 | "Dave Mason <dcm@redhat.com>", |
| 98 | NULL((void*)0) |
| 99 | }; |
| 100 | int i; |
| 101 | |
| 102 | if (about) { |
| 103 | ctk_window_set_screen (CTK_WINDOW (about)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((about)), ((ctk_window_get_type ())))))), |
| 104 | menuitem_to_screen (menuitem)); |
| 105 | ctk_window_present (CTK_WINDOW (about)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((about)), ((ctk_window_get_type ()))))))); |
| 106 | return; |
| 107 | } |
| 108 | |
| 109 | for (i = 0; authors [i]; i++) |
| 110 | authors [i] = _(authors [i])gettext (authors [i]); |
| 111 | |
| 112 | about = ctk_about_dialog_new (); |
| 113 | g_object_set (about, |
| 114 | "program-name", _("The CAFE Panel")gettext ("The CAFE Panel"), |
| 115 | "version", VERSION"2.0.0", |
| 116 | "copyright", _("Copyright \xc2\xa9 1997-2003 Free Software Foundation, Inc.\n"gettext ("Copyright \xc2\xa9 1997-2003 Free Software Foundation, Inc.\n" "Copyright \xc2\xa9 2004 Vincent Untz\n" "Copyright \xc2\xa9 2011-2020 MATE developers\n" "Copyright \xc2\xa9 2022-2025 Pablo Barciela") |
| 117 | "Copyright \xc2\xa9 2004 Vincent Untz\n"gettext ("Copyright \xc2\xa9 1997-2003 Free Software Foundation, Inc.\n" "Copyright \xc2\xa9 2004 Vincent Untz\n" "Copyright \xc2\xa9 2011-2020 MATE developers\n" "Copyright \xc2\xa9 2022-2025 Pablo Barciela") |
| 118 | "Copyright \xc2\xa9 2011-2020 MATE developers\n"gettext ("Copyright \xc2\xa9 1997-2003 Free Software Foundation, Inc.\n" "Copyright \xc2\xa9 2004 Vincent Untz\n" "Copyright \xc2\xa9 2011-2020 MATE developers\n" "Copyright \xc2\xa9 2022-2025 Pablo Barciela") |
| 119 | "Copyright \xc2\xa9 2022-2025 Pablo Barciela")gettext ("Copyright \xc2\xa9 1997-2003 Free Software Foundation, Inc.\n" "Copyright \xc2\xa9 2004 Vincent Untz\n" "Copyright \xc2\xa9 2011-2020 MATE developers\n" "Copyright \xc2\xa9 2022-2025 Pablo Barciela"), |
| 120 | "comments", _("This program is responsible for launching other "gettext ("This program is responsible for launching other " "applications and provides useful utilities." ) |
| 121 | "applications and provides useful utilities.")gettext ("This program is responsible for launching other " "applications and provides useful utilities." ), |
| 122 | "authors", authors, |
| 123 | "documenters", documenters, |
| 124 | "title", _("About the CAFE Panel")gettext ("About the CAFE Panel"), |
| 125 | "translator-credits", _("translator-credits")gettext ("translator-credits"), |
| 126 | "logo-icon-name", PANEL_ICON_PANEL"cafe-panel", |
| 127 | NULL((void*)0)); |
| 128 | |
| 129 | ctk_window_set_screen (CTK_WINDOW (about)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((about)), ((ctk_window_get_type ())))))), |
| 130 | menuitem_to_screen (menuitem)); |
| 131 | g_signal_connect (about, "destroy",g_signal_connect_data ((about), ("destroy"), (((GCallback) (ctk_widget_destroyed ))), (&about), ((void*)0), (GConnectFlags) 0) |
| 132 | G_CALLBACK (ctk_widget_destroyed),g_signal_connect_data ((about), ("destroy"), (((GCallback) (ctk_widget_destroyed ))), (&about), ((void*)0), (GConnectFlags) 0) |
| 133 | &about)g_signal_connect_data ((about), ("destroy"), (((GCallback) (ctk_widget_destroyed ))), (&about), ((void*)0), (GConnectFlags) 0); |
| 134 | |
| 135 | g_signal_connect (about, "response",g_signal_connect_data ((about), ("response"), (((GCallback) ( ctk_widget_destroy))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) |
| 136 | G_CALLBACK (ctk_widget_destroy),g_signal_connect_data ((about), ("response"), (((GCallback) ( ctk_widget_destroy))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) |
| 137 | NULL)g_signal_connect_data ((about), ("response"), (((GCallback) ( ctk_widget_destroy))), (((void*)0)), ((void*)0), (GConnectFlags ) 0); |
| 138 | |
| 139 | ctk_widget_show (about); |
| 140 | } |
| 141 | |
| 142 | static void |
| 143 | panel_context_menu_create_new_panel (CtkWidget *menuitem) |
| 144 | { |
| 145 | panel_profile_create_toplevel (ctk_widget_get_screen (menuitem)); |
| 146 | } |
| 147 | |
| 148 | static void |
| 149 | panel_context_menu_delete_panel (PanelToplevel *toplevel) |
| 150 | { |
| 151 | if (panel_toplevel_is_last_unattached (toplevel)) { |
| 152 | panel_error_dialog (CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ())))))), |
| 153 | ctk_window_get_screen (CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ()))))))), |
| 154 | "cannot_delete_last_panel", TRUE(!(0)), |
| 155 | _("Cannot delete this panel")gettext ("Cannot delete this panel"), |
| 156 | _("You must always have at least one panel.")gettext ("You must always have at least one panel.")); |
| 157 | return; |
| 158 | } |
| 159 | |
| 160 | panel_delete (toplevel); |
| 161 | } |
| 162 | |
| 163 | static void |
| 164 | panel_context_menu_setup_delete_panel_item (CtkWidget *menu, |
| 165 | CtkWidget *menuitem) |
| 166 | { |
| 167 | PanelWidget *panel_widget; |
| 168 | gboolean sensitive; |
| 169 | |
| 170 | panel_widget = menu_get_panel (menu); |
| 171 | |
| 172 | g_assert (PANEL_IS_TOPLEVEL (panel_widget->toplevel))do { if ((((__extension__ ({ GTypeInstance *__inst = (GTypeInstance *) ((panel_widget->toplevel)); GType __t = ((panel_toplevel_get_type ())); gboolean __r; if (!__inst) __r = (0); else if (__inst-> g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))) ; else g_assertion_message_expr (((gchar*) 0), "panel-context-menu.c" , 172, ((const char*) (__func__)), "PANEL_IS_TOPLEVEL (panel_widget->toplevel)" ); } while (0); |
| 173 | |
| 174 | sensitive = |
| 175 | !panel_toplevel_is_last_unattached (panel_widget->toplevel) && |
| 176 | !panel_lockdown_get_locked_down () && |
| 177 | panel_profile_id_lists_are_writable (); |
| 178 | |
| 179 | ctk_widget_set_sensitive (menuitem, sensitive); |
| 180 | } |
| 181 | |
| 182 | static void |
| 183 | panel_reset_response (CtkWidget *dialog, |
| 184 | int response) |
| 185 | { |
| 186 | if (response == CTK_RESPONSE_OK) { |
| 187 | panel_reset (); |
| 188 | } |
| 189 | |
| 190 | ctk_widget_destroy (dialog); |
| 191 | } |
| 192 | |
| 193 | static void |
| 194 | query_panel_reset (PanelToplevel *toplevel) |
| 195 | { |
| 196 | CtkWidget *dialog; |
| 197 | char *text1; |
| 198 | char *text2; |
| 199 | |
| 200 | text1 = _("Reset all panels?")gettext ("Reset all panels?"); |
| 201 | text2 = _("When the panels are reset, all \n"gettext ("When the panels are reset, all \n" "custom settings are lost." ) |
| 202 | "custom settings are lost.")gettext ("When the panels are reset, all \n" "custom settings are lost." ); |
| 203 | |
| 204 | dialog = ctk_message_dialog_new ( |
| 205 | CTK_WINDOW (toplevel)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_window_get_type ())))))), |
| 206 | CTK_DIALOG_MODAL, |
| 207 | CTK_MESSAGE_WARNING, |
| 208 | CTK_BUTTONS_NONE, |
| 209 | "%s", text1); |
| 210 | |
| 211 | ctk_message_dialog_format_secondary_text (CTK_MESSAGE_DIALOG (dialog)((((CtkMessageDialog*) (void *) g_type_check_instance_cast (( GTypeInstance*) ((dialog)), ((ctk_message_dialog_get_type ()) ))))), |
| 212 | "%s", text2); |
| 213 | ctk_dialog_add_buttons (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), |
| 214 | _("_Cancel")gettext ("_Cancel"), CTK_RESPONSE_CANCEL, |
| 215 | _("_Reset Panels")gettext ("_Reset Panels"), CTK_RESPONSE_OK, |
| 216 | NULL((void*)0)); |
| 217 | |
| 218 | ctk_dialog_set_default_response (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), CTK_RESPONSE_CANCEL); |
| 219 | |
| 220 | ctk_window_set_position (CTK_WINDOW (dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_window_get_type ())))))), CTK_WIN_POS_CENTER); |
| 221 | |
| 222 | g_signal_connect (dialog, "response",g_signal_connect_data ((dialog), ("response"), (((GCallback) ( panel_reset_response))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) |
| 223 | G_CALLBACK (panel_reset_response),g_signal_connect_data ((dialog), ("response"), (((GCallback) ( panel_reset_response))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) |
| 224 | NULL)g_signal_connect_data ((dialog), ("response"), (((GCallback) ( panel_reset_response))), (((void*)0)), ((void*)0), (GConnectFlags ) 0); |
| 225 | |
| 226 | ctk_widget_show_all (dialog); |
| 227 | } |
| 228 | |
| 229 | static void |
| 230 | panel_context_menu_build_edition (PanelWidget *panel_widget, |
| 231 | CtkWidget *menu) |
| 232 | { |
| 233 | CtkWidget *menuitem; |
| 234 | |
| 235 | ctk_menu_set_reserve_toggle_size (CTK_MENU (menu)((((CtkMenu*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((menu)), ((ctk_menu_get_type ())))))), FALSE(0)); |
| 236 | |
| 237 | menuitem = panel_image_menu_item_new_from_icon ("list-add", _("_Add to Panel…")gettext ("_Add to Panel…")); |
| 238 | |
| 239 | ctk_widget_show (menuitem); |
| 240 | ctk_menu_shell_append (CTK_MENU_SHELL (menu)((((CtkMenuShell*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((menu)), ((ctk_menu_shell_get_type ())))))), menuitem); |
| 241 | g_signal_connect (G_OBJECT (menuitem), "activate",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menuitem)), (((GType) ((20) << (2) )))))))), ("activate"), (((GCallback) (panel_addto_present))) , (panel_widget), ((void*)0), (GConnectFlags) 0) |
| 242 | G_CALLBACK (panel_addto_present), panel_widget)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menuitem)), (((GType) ((20) << (2) )))))))), ("activate"), (((GCallback) (panel_addto_present))) , (panel_widget), ((void*)0), (GConnectFlags) 0); |
| 243 | |
| 244 | if (!panel_profile_id_lists_are_writable ()) |
| 245 | ctk_widget_set_sensitive (menuitem, FALSE(0)); |
| 246 | |
| 247 | menuitem = panel_image_menu_item_new_from_icon ("document-properties", _("_Properties")gettext ("_Properties")); |
| 248 | |
| 249 | ctk_widget_show (menuitem); |
| 250 | ctk_menu_shell_append (CTK_MENU_SHELL (menu)((((CtkMenuShell*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((menu)), ((ctk_menu_shell_get_type ())))))), menuitem); |
| 251 | g_signal_connect_swapped (menuitem, "activate",g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_properties_dialog_present))), (panel_widget->toplevel ), ((void*)0), G_CONNECT_SWAPPED) |
| 252 | G_CALLBACK (panel_properties_dialog_present),g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_properties_dialog_present))), (panel_widget->toplevel ), ((void*)0), G_CONNECT_SWAPPED) |
| 253 | panel_widget->toplevel)g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_properties_dialog_present))), (panel_widget->toplevel ), ((void*)0), G_CONNECT_SWAPPED); |
| 254 | |
| 255 | add_menu_separator (menu); |
| 256 | |
| 257 | menuitem = panel_image_menu_item_new_from_icon ("document-revert", _("_Reset All Panels")gettext ("_Reset All Panels")); |
| 258 | |
| 259 | ctk_widget_show (menuitem); |
| 260 | ctk_menu_shell_append (CTK_MENU_SHELL (menu)((((CtkMenuShell*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((menu)), ((ctk_menu_shell_get_type ())))))), menuitem); |
| 261 | g_signal_connect_swapped (menuitem, "activate",g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (query_panel_reset))), (panel_widget->toplevel), ((void* )0), G_CONNECT_SWAPPED) |
| 262 | G_CALLBACK (query_panel_reset), panel_widget->toplevel)g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (query_panel_reset))), (panel_widget->toplevel), ((void* )0), G_CONNECT_SWAPPED); |
| 263 | |
| 264 | menuitem = panel_image_menu_item_new_from_icon ("edit-delete", _("_Delete This Panel")gettext ("_Delete This Panel")); |
| 265 | |
| 266 | ctk_widget_show (menuitem); |
| 267 | ctk_menu_shell_append (CTK_MENU_SHELL (menu)((((CtkMenuShell*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((menu)), ((ctk_menu_shell_get_type ())))))), menuitem); |
| 268 | g_signal_connect_swapped (G_OBJECT (menuitem), "activate",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menuitem)), (((GType) ((20) << (2) )))))))), ("activate"), (((GCallback) (panel_context_menu_delete_panel ))), (panel_widget->toplevel), ((void*)0), G_CONNECT_SWAPPED ) |
| 269 | G_CALLBACK (panel_context_menu_delete_panel),g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menuitem)), (((GType) ((20) << (2) )))))))), ("activate"), (((GCallback) (panel_context_menu_delete_panel ))), (panel_widget->toplevel), ((void*)0), G_CONNECT_SWAPPED ) |
| 270 | panel_widget->toplevel)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menuitem)), (((GType) ((20) << (2) )))))))), ("activate"), (((GCallback) (panel_context_menu_delete_panel ))), (panel_widget->toplevel), ((void*)0), G_CONNECT_SWAPPED ); |
| 271 | g_signal_connect (G_OBJECT (menu), "show",g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menu)), (((GType) ((20) << (2))))) )))), ("show"), (((GCallback) (panel_context_menu_setup_delete_panel_item ))), (menuitem), ((void*)0), (GConnectFlags) 0) |
| 272 | G_CALLBACK (panel_context_menu_setup_delete_panel_item),g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menu)), (((GType) ((20) << (2))))) )))), ("show"), (((GCallback) (panel_context_menu_setup_delete_panel_item ))), (menuitem), ((void*)0), (GConnectFlags) 0) |
| 273 | menuitem)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((menu)), (((GType) ((20) << (2))))) )))), ("show"), (((GCallback) (panel_context_menu_setup_delete_panel_item ))), (menuitem), ((void*)0), (GConnectFlags) 0); |
| 274 | |
| 275 | add_menu_separator (menu); |
| 276 | |
| 277 | menuitem = panel_image_menu_item_new_from_icon ("document-new", _("_New Panel")gettext ("_New Panel")); |
| 278 | |
| 279 | ctk_widget_show (menuitem); |
| 280 | ctk_menu_shell_append (CTK_MENU_SHELL (menu)((((CtkMenuShell*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((menu)), ((ctk_menu_shell_get_type ())))))), menuitem); |
| 281 | g_signal_connect (menuitem, "activate",g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_create_new_panel))), (((void*)0)), ((void *)0), (GConnectFlags) 0) |
| 282 | G_CALLBACK (panel_context_menu_create_new_panel),g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_create_new_panel))), (((void*)0)), ((void *)0), (GConnectFlags) 0) |
| 283 | NULL)g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_create_new_panel))), (((void*)0)), ((void *)0), (GConnectFlags) 0); |
| 284 | ctk_widget_set_sensitive (menuitem, |
| 285 | panel_profile_id_lists_are_writable ()); |
| 286 | |
| 287 | add_menu_separator (menu); |
| 288 | } |
| 289 | |
| 290 | CtkWidget * |
| 291 | panel_context_menu_create (PanelWidget *panel) |
| 292 | { |
| 293 | CtkWidget *retval; |
| 294 | CtkWidget *menuitem; |
| 295 | |
| 296 | if (panel->master_widget) { |
| 297 | gpointer *pointer; |
| 298 | AppletInfo *info; |
| 299 | |
| 300 | pointer = g_object_get_data (G_OBJECT (panel->master_widget)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((panel->master_widget)), (((GType) ((20) << (2)) )))))), |
| 301 | "applet_info"); |
| 302 | |
| 303 | g_assert (pointer != NULL)do { if (pointer != ((void*)0)) ; else g_assertion_message_expr (((gchar*) 0), "panel-context-menu.c", 303, ((const char*) ( __func__)), "pointer != NULL"); } while (0); |
| 304 | info = (AppletInfo *) pointer; |
Casting a non-structure type to a structure type and accessing a field can lead to memory access errors or data corruption | |
| 305 | |
| 306 | if (info->menu == NULL((void*)0)) { |
| 307 | info->menu = cafe_panel_applet_create_menu (info); |
| 308 | } |
| 309 | |
| 310 | return info->menu; |
| 311 | } |
| 312 | |
| 313 | retval = create_empty_menu (); |
| 314 | ctk_widget_set_name (retval, "cafe-panel-context-menu"); |
| 315 | |
| 316 | if (!panel_lockdown_get_locked_down ()) |
| 317 | panel_context_menu_build_edition (panel, retval); |
| 318 | |
| 319 | menuitem = panel_image_menu_item_new_from_icon ("help-browser", _("_Help")gettext ("_Help")); |
| 320 | |
| 321 | ctk_widget_show (menuitem); |
| 322 | ctk_menu_shell_append (CTK_MENU_SHELL (retval)((((CtkMenuShell*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((retval)), ((ctk_menu_shell_get_type ())))))), menuitem); |
| 323 | g_signal_connect (menuitem, "activate",g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_show_help))), (((void*)0)), ((void*)0), (GConnectFlags) 0) |
| 324 | G_CALLBACK (panel_context_menu_show_help), NULL)g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_show_help))), (((void*)0)), ((void*)0), (GConnectFlags) 0); |
| 325 | |
| 326 | menuitem = panel_image_menu_item_new_from_icon ("help-about", _("A_bout Panels")gettext ("A_bout Panels")); |
| 327 | |
| 328 | ctk_widget_show (menuitem); |
| 329 | ctk_menu_shell_append (CTK_MENU_SHELL (retval)((((CtkMenuShell*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((retval)), ((ctk_menu_shell_get_type ())))))), menuitem); |
| 330 | g_signal_connect (menuitem, "activate",g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_show_about_dialog))), (((void*)0)), ((void *)0), (GConnectFlags) 0) |
| 331 | G_CALLBACK (panel_context_menu_show_about_dialog),g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_show_about_dialog))), (((void*)0)), ((void *)0), (GConnectFlags) 0) |
| 332 | NULL)g_signal_connect_data ((menuitem), ("activate"), (((GCallback ) (panel_context_menu_show_about_dialog))), (((void*)0)), ((void *)0), (GConnectFlags) 0); |
| 333 | |
| 334 | //FIXME: can we get rid of this? (needed by menu_get_panel()) |
| 335 | g_object_set_data (G_OBJECT (retval)((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((retval)), (((GType) ((20) << (2)))))))), "menu_panel", panel); |
| 336 | |
| 337 | /* Set up theme and transparency support */ |
| 338 | CtkWidget *toplevel = ctk_widget_get_toplevel (retval); |
| 339 | /* Fix any failures of compiz/other wm's to communicate with ctk for transparency */ |
| 340 | CdkScreen *screen = ctk_widget_get_screen(CTK_WIDGET(toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
| 341 | CdkVisual *visual = cdk_screen_get_rgba_visual(screen); |
| 342 | ctk_widget_set_visual(CTK_WIDGET(toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ())))))), visual); |
| 343 | /* Set menu and it's toplevel window to follow panel theme */ |
| 344 | CtkStyleContext *context; |
| 345 | context = ctk_widget_get_style_context (CTK_WIDGET(toplevel)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((toplevel)), ((ctk_widget_get_type ()))))))); |
| 346 | ctk_style_context_add_class(context,"gnome-panel-menu-bar"); |
| 347 | ctk_style_context_add_class(context,"cafe-panel-menu-bar"); |
| 348 | |
| 349 | return retval; |
| 350 | } |