23.3.4. Обработка сигналов

23.3.4. Обработка сигналов

Перед тем, как перейти к следующему пункту, нужно еще раз рассмотреть функцию gtk_signal_connect(). Данной функции нужно передать четыре параметра:

GtkObject *object — объект, которому может быть послан сигнал;

const gchar *name — имя сигнала, например, «destroy»;

GtkSignalFunc func — имя функции обратного вызова, то есть функции, которая будет вызвана для обработки сигнала;

gpointer data — любые данные, которые будут переданы функции-обработчику.

Что такое сигнал? Как только пользователь переместил мышь, оконная среда посылает приложению сигнал, оповещающий о том, что мышь была перемещена. Как только пользователь щелкнул мышью, приложение получит сигнал об этом щелчке. Обрабатывать все сигналы может окно, но удобнее для каждого виджита установить собственную реакцию на события.

Функция, которая обрабатывает сигнал, называется по-разному: функция-обработчик (мы будем использовать именно это название), функция обратного вызова и callback-функция. Такой функции нужно передать два параметра (их передаст сама GTK):

GtkWidget *widget — виджит;

gpointer data — данные.

Параметры, которые нужно передать обработчику, зависят от передаваемого сигнала. Например, если бы мы передавали не сигнал «destroy», а сигнал «delete-event», то нужно было бы указать уже три параметра:

GtkWidget *widget — виджит;

GdkEvent *event — событие;

gpointer data — данные.

Вот наиболее часто используемые сигналы:

button_press_event — нажата левая кнопка мыши;

button_release_event — левая кнопка отпущена;

motion_notify_event — движение мыши;

delete_event — удаление объекта;

destroy_event — уничтожение объекта;

key_press_event — нажата клавиша клавиатуры;

key_release_event — клавиша отпущена;

enter_notify_event — указатель мыши вошел в пределы объекта;

leave_notify_event — указатель мыши вышел за пределы объекта;

focus_in_event — объект стал активным (получил фокус);

focus_out_event — объект не активен;

drag_begin_event — начало перемещения объекта;

drag_request_event — запрос на перемещение объекта;

drag_end_event — перемещение объекта;

drop_enter_event — объект перемещен.

Наиболее часто используемые события GDK (используются в функции-обработчике) перечислены ниже:

? GDK_NOTHING — не произошло никакого события;

? GDK_DELETE — удаление;

? GDK_DESTROY — уничтожение;

? GDK_MOTION_NOTIFY — уведомление о перемещении;

? GDK_BUTTON_PRESS — нажата любая кнопка мыши;

? GDK_1BUTTON_PRESS — нажатие первой кнопки мыши;

? GDK_2BUTTON_PRESS — нажатие второй кнопки мыши;

? GDK_3BUTTON_PRESS — нажата третья кнопка;

? GDK_BUTTON_RELEASE — кнопка (любая) отпущена;

? GDK_KEY_PRESS — нажата клавиша;

? GDK_KEY_RELEASE — клавиша отпущена;

? GDK_ENTER_NOTIFY — указатель мыши в пределах объекта (виджита);

? GDK_LEAVE_NOTIFY — указатель мыши вышел за пределы виджита;

? GDK_FOCUS_CHANGE — изменения фокуса ввода;

? GDK_OTHER_EVENT — другое событие.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Похожие главы из других книг:

10.2. Действия сигналов

Из книги автора

10.2. Действия сигналов Каждый сигнал (вскоре мы представим полный список) имеет связанное с ним действие по умолчанию. POSIX обозначает это как диспозицию (disposition) сигнала. Это то действие, которое ядро осуществляет для процесса, когда поступает определенный сигнал. Действие


10.4.3. Игнорирование сигналов

Из книги автора

10.4.3. Игнорирование сигналов Более практично, когда вызывается обработчик сигнала, это означает, что программа должна завершиться и выйти. Было бы раздражающим, если бы большинство программ по получении SIGINT выводили бы сообщение и продолжали работу; смысл сигнала в том,


Глава 12 Обработка сигналов

Из книги автора

Глава 12 Обработка сигналов Сигналы — это простейшая форма межпроцессного взаимодействия в мире POSIX. Они позволят одному процессу быть прерванным асинхронным образом по инициативе другого процесса (или ядра) для того, чтобы обработать какое-то событие. Обработав сигнал,


12.1. Концепция сигналов

Из книги автора

12.1. Концепция сигналов 12.1.1. Жизненный цикл сигнала Сигналы имеют четко определенный жизненный цикл: они создаются, сохраняются до тех пор, пока ядро не выполнит определенное действие на основе сигнала, а затем вызывают совершение этого действия. Создание сигнала


12.2.3. Перехват сигналов

Из книги автора

12.2.3. Перехват сигналов Вместо использования функции signal() (чья семантика в процессе эволюции стала неправильной) POSIX-программы регистрируют обработчики сигналов с помощью sigaction().#include <signal.h>int sigaction(int signum, struct sigaction *act, struct sigaction *oact);Этот системный вызов устанавливает


12.2.6. Ожидание сигналов

Из книги автора

12.2.6. Ожидание сигналов Когда программа построена преимущественно вокруг сигналов, часто необходимо, чтобы она ожидала появления какого-то сигнала, прежде чем продолжать работу. Системный вызов pause() предоставляет простую возможность для этого.#include <unistd.h>int


12.3.1. Описание сигналов

Из книги автора

12.3.1. Описание сигналов Иногда приложения нуждаются в описании сигнала для отображения пользователю или помещения в журнал. Существуют три способа сделать это (см. главу 9). К сожалению, ни один из них не стандартизован.Самый старый метод предусматривает применение sys_siglist


15.1.3. Обработка сигналов управления заданиями

Из книги автора

15.1.3. Обработка сигналов управления заданиями Хотя многие приложения можно останавливать и перезапускать без побочных эффектов, другим процессам требуется обрабатывать состояния останова и запуска. Например, большинству редакторов необходимо модифицировать параметры


5.8. Обработка сигналов POSIX

Из книги автора

5.8. Обработка сигналов POSIX Сигнал — это уведомление процесса о том, что произошло некое событие. Иногда сигналы называют программными прерываниями (software interrupts). Подразумевается, что процесс не знает заранее о том, когда придет сигнал.Сигналы могут посылаться в следующих


7.2.1 Обработка сигналов

Из книги автора

7.2.1 Обработка сигналов Ядро обрабатывает сигналы в контексте того процесса, который получает их, поэтому чтобы обработать сигналы, нужно запустить процесс. Существует три способа обработки сигналов: процесс завершается по получении сигнала, не обращает внимание на


19.7.9. Обработка сигналов и протоколирование

Из книги автора

19.7.9. Обработка сигналов и протоколирование Возможно, вы хотите обеспечить выполнение вашего сценария после выхода пользователя из интерпретатора или выполнить какие-нибудь действия при отключении удаленного пользователя от системы. «Перехватить» сигнал (прерывание)


8.7. Обработка сигналов и протоколирование

Из книги автора

8.7. Обработка сигналов и протоколирование Обычно при завершении сеанса работы пользователя система посылает всем запущенным им процессам сигналы (п.3.3.2), которые приводят к прекращению этих процессов. Возможно, вам понадобится обеспечить своему сценарию возможность


23.3.4. Обработка сигналов

Из книги автора

23.3.4. Обработка сигналов Перед тем, как перейти к следующему пункту, нужно еще раз рассмотреть функцию gtk_signal_connect(). Данной функции нужно передать четыре параметра:? GtkObject *object — объект, которому может быть послан сигнал;? const gchar *name — имя сигнала, например, «destroy»;? GtkSignalFunc func


Перехват сигналов

Из книги автора

Перехват сигналов Вы можете использовать встроенную в bash программу trap для перехвата сигналов в своих программах. Это хороший способ изящно завершать работу программы. Например, если пользователь, когда ваша программа работает, нажмет CTRL-C — программе будет отправлен


26.3.4. Игнорирование сигналов

Из книги автора

26.3.4. Игнорирование сигналов Когда пользователь регистрируется в системе, просматривается файл /etc/profile; нежелательно, чтобы пользователь прерывал этот процесс. Обычно задается перехват, или игнорирование, сигналов 1, 2, 3 и 15, но потом при просмотре сообщения motd (ежедневного