Что относительно констант класса?
<?php
class YourClass
{
const SOME_CONSTANT = 1;
public function echoConstant()
{
echo self::SOME_CONSTANT;
}
}
echo YourClass::SOME_CONSTANT;
$c = new YourClass;
$c->echoConstant();
Я не знаю X11, но я погуглил, используя «Перехватить WM_DELETE_WINDOW
X11» как ключевые слова. Найдено 17k - MarkMail и Mplayer-совершает r154 - trunk / libvo . В обоих случаях они делают одно и то же.
/* This is used to intercept window closing requests. */
static Atom wm_delete_window;
в static void x11_init ()
,
XMapWindow(display, win);
wm_delete_window = XInternAtom(display, "WM_DELETE_WINDOW", False);
XSetWMProtocols(display, win, &wm_delete_window, 1);
затем в static int x11_check_events ()
,
XEvent Event;
while (XPending(display)) {
XNextEvent(display, &Event);
if (Event.type == ClientMessage) {
if ((Atom)Event.xclient.data.l[0] == wm_delete_window) {
/* your code here */
}
}
}
См. XInternAtom , XSetWMP и XNextEvent .
После того, как я написал выше, я обнаружил, что Окно обработки закрывается в приложении X11 :
Когда пользователь нажимает кнопку закрытия
[x]
в нашем приложении X11 мы хотим это чтобы открыть диалоговое окно с вопросом «вы действительно хотите бросить курить? ». Это равнина X приложение. Никаких модных виджетов GTK или QT Вот. Итак, как поймать «окно» закрывается »?Ответ - сообщить Окну Менеджер нас интересует эти событие, вызвав
XSetWMProtocols
и регистрация сообщенияWM_DELETE_WINDOW
с этим. Тогда мы получим клиента сообщение от диспетчера окон, если кто-то пытается закрыть окно, и это не закроет, это оставит нас до нас. Вот пример…
// example.cpp
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <iostream>
int main()
{
Display* display = XOpenDisplay(NULL);
Window window = XCreateSimpleWindow(display,
DefaultRootWindow(display),
0, 0,
500, 400,
0,
0, 0);
// register interest in the delete window message
Atom wmDeleteMessage = XInternAtom(display, "WM_DELETE_WINDOW", False);
XSetWMProtocols(display, window, &wmDeleteMessage, 1);
std::cout << "Starting up..." << std::endl;
XMapWindow(display, window);
while (true) {
XEvent event;
XNextEvent(display, &event);
if (event.type == ClientMessage &&
event.xclient.data.l[0] == wmDeleteMessage) {
std::cout << "Shutting down now!!!" << std::endl;
break;
}
}
XCloseDisplay(display);
return 0;
}
Хорошо, чтобы уточнить мое предыдущее предложение, вы можете исследовать XEmbed . По крайней мере, это может дать вам несколько идей, которые можно попробовать.
В противном случае я бы посмотрел, как может работать другое подобное программное обеспечение (например, wmdock или как реализован GtkPlug / GtkSocket), хотя я верю в в обоих случаях требуется явная поддержка в приложениях.
Надеюсь, что это будет более полезно.