Нашел код помогающий скрывать меню в gtk приложениях.
Пытаюсь собрать:
$ gcc -Wall -g `pkg-config --cflags --libs gtk+-2.0` gtk.c
получаю:
gtk.c: В функции ‘gtk_module_init’
gtk.c:63: предупреждение: assignment from incompatible pointer type
gtk.c:70: предупреждение: assignment from incompatible pointer type
gtk.c: На верхнем уровне:
gtk.c:8: предупреждение: ‘old_gtk_window_constructor’ defined but not used
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: выполнение ld завершилось с кодом возврата 1
Gentoo, GCC 4.1.2
/* КОД */
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#define _gtk_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID
#define _gtk_marshal_NONE__NONE _gtk_marshal_VOID__VOID
static GObject* (*old_gtk_menu_bar_constructor)(GType type, guint n_construct_properties, GObjectConstructParam *construct_params) = NULL;
static GObject* (*old_gtk_window_constructor)(GType type, guint n_construct_properties, GObjectConstructParam *construct_params) = NULL;
static void (*old_widget_show) (GtkWidget * widget) = NULL;
static void toggle_menu_bar (GtkWidget *widget, gpointer user_data)
{
GtkWidget * wdg = GTK_WIDGET(user_data);
GTK_WIDGET_GET_CLASS(wdg)->show = old_widget_show;
if (GTK_WIDGET_VISIBLE(wdg))
gtk_widget_hide(wdg);
else
gtk_widget_show(wdg);
}
static void anchor_event (GtkWidget *widget, GtkWidget *previous_toplevel, gpointer user_data)
{
GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
if (GTK_WIDGET_TOPLEVEL (toplevel)) {
if (previous_toplevel)
g_signal_handlers_disconnect_by_func(previous_toplevel, G_CALLBACK(toggle_menu_bar), widget);
g_signal_connect (toplevel, "toggle-menu-bar", G_CALLBACK(toggle_menu_bar), widget);
}
}
static void show (GtkWidget *widget)
{
if (GTK_IS_MENU_BAR(widget))
return;
old_widget_show(widget);
}
GObject* new_gtk_menu_bar_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_params)
{
GObject * ret = old_gtk_menu_bar_constructor(type,n_construct_properties,construct_params);
g_signal_connect (ret, "hierarchy-changed", G_CALLBACK(anchor_event), NULL);
return ret;
}
G_MODULE_EXPORT void
gtk_module_init (gint * argc, gchar *** argv)
{
GtkWidget *fc;
GObjectClass *klass;
g_signal_new ("toggle-menu-bar",
GTK_TYPE_WINDOW,
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
0,
NULL, NULL,
_gtk_marshal_VOID__VOID,
G_TYPE_NONE,
0);
fc = gtk_menu_bar_new();
klass = GTK_MENU_BAR_GET_CLASS(fc);
old_gtk_menu_bar_constructor = klass->constructor;
klass->constructor = new_gtk_menu_bar_constructor;
old_widget_show = GTK_WIDGET_CLASS(klass)->show;
GTK_WIDGET_CLASS(klass)->show = show;
fc = gtk_window_new(GTK_WINDOW_TOPLEVEL);
klass = GTK_WINDOW_GET_CLASS(fc);
gtk_binding_entry_add_signal (gtk_binding_set_by_class (klass), GDK_m, GDK_CONTROL_MASK,
"toggle-menu-bar", 0);
}
/* КОД */
Ответ на:
комментарий
от dilmah
Ответ на:
комментарий
от alex_custov
Ответ на:
комментарий
от ovegio
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум помогите с C + GTK (2009)
- Форум [custom GTK widget], почему не отображается родитель? (2011)
- Форум Бегущая строка на GTK (2016)
- Форум Снова про gtk+ - проблема маленькая (2004)
- Форум gtk_label_select_region (2018)
- Форум GTK+. Проблема событием появления всплывающего меню. (2011)
- Форум libnotify+gtk2+threads in c++ = Ошибка сегментирования (2012)
- Форум gtk_main() (2013)
- Форум Правильная передача указателей на ресурсы Gtk/ZeroMQ. (2011)
- Форум Как отлавливать ошибки при запуске и работе программы? (2022)