Вот несколько указателей на ваши запросы:
Is here any possibility to make GtkScrollButton insensible to mouse wheel, at way like is GtkEntry?
Прокрутка колесика мыши, щелчок мышью событий . События могут быть замаскированы. Это можно сделать на двух уровнях.
- На уровне
GtkWidget
: вы можете использовать gtk_widget_get_events()
, который будет возвращать маску события в виде GdkEventMask
. Вы можете изменить это в соответствии со своими потребностями и установить его, используя gtk_widget_set_events()
- На уровне
GdkWindow
: GtkWidget
, который имеет свою собственную область рисования / событий, имеет GdkWindow
, связанный с ним. Вы можете получить маску событий этого окна с помощью gdk_window_get_events()
и изменить возвращенное значение GdkEventMask
в соответствии с вашими потребностями и установить значение GdkWindow
с помощью gdk_window_set_events()
. Вы можете изменить маску события с помощью побитовых операций. Если GdkWindow
совместно используется более чем одним виджетом, то эта маска будет влиять на все виджеты. Для маскировки событий прокрутки вы можете посмотреть в GDK_SCROLL_MASK
, GDK_BUTTON_PRESS_MASK
& GDK_BUTTON_RELEASE_MASK
. Вы всегда можете проверить маску для события, которое вы ищете, уже установлено или нет. Примечание : GdkWindow
связанные вызовы будут успешными только после создания GdkWindow
для GtkWidget
. Вы можете сделать эти вызовы после gtk_widget_show()
виджета или gtk_widget_show_all
окна, которое содержит эти виджеты.
Or better, could GtkSpinButton be shown without up/down buttons.
AFAIK GtkSpinButton
имеет кнопку вверх / вниз, указывающую на функциональность, которую он предоставляет. Если вы не хотите этого, вы можете выбрать другой виджет, скажем GtkEntry
(из которого GtkSpinButton
означает " производная ") или GtkLabel
. Конечно, вы можете создать свой собственный виджет (с нуля или " получить " из существующего GtkWidget
) в соответствии с вашими потребностями и использовать то же самое; никто не мешает вам делать это:)
How to redirect scroll signal from GtkSpinButton to scrolledwindow?
Это можно сделать в обратном вызове "scroll-event"
GtkSpinButton. Вы можете остановить излучение сигнала на GtkSpinButton
и вернуть FALSE
для распространения события.
...
/* Event callback */
gboolean spinbutton_scroll_handler(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
/* Stop emission on current widget. Default handler also not called */
/* Refer http://developer.gnome.org/gobject/stable/gobject-Signals.html#g-signal-stop-emission-by-name */
g_signal_stop_emission_by_name(widget, "scroll-event");
/* Return FALSE to propagate the event further; thus scroll window will scroll
If TRUE returned other handlers not invoked for this event,
thus no scroll on scroll window */
return FALSE;
}
...
/* Connect scroll-event to the callback */
g_signal_connect(spinbutton, "scroll-event",
G_CALLBACK(spinbutton_scroll_handler),
(gpointer)0);
...
Надеюсь, это поможет!