Changeset View
Changeset View
Standalone View
Standalone View
src/platforms/xcb/netwm.cpp
Show First 20 Lines • Show All 1140 Lines • ▼ Show 20 Line(s) | 827 | #endif | |||
---|---|---|---|---|---|
1141 | if (p->properties2 & WM2KDEShadow) { | 1141 | if (p->properties2 & WM2KDEShadow) { | ||
1142 | atoms[pnum++] = p->atom(_KDE_NET_WM_SHADOW); | 1142 | atoms[pnum++] = p->atom(_KDE_NET_WM_SHADOW); | ||
1143 | } | 1143 | } | ||
1144 | 1144 | | |||
1145 | if (p->properties2 & WM2OpaqueRegion) { | 1145 | if (p->properties2 & WM2OpaqueRegion) { | ||
1146 | atoms[pnum++] = p->atom(_NET_WM_OPAQUE_REGION); | 1146 | atoms[pnum++] = p->atom(_NET_WM_OPAQUE_REGION); | ||
1147 | } | 1147 | } | ||
1148 | 1148 | | |||
1149 | if (p->properties2 & WM2GTKFrameExtents) { | ||||
1150 | atoms[pnum++] = p->atom(_GTK_FRAME_EXTENTS); | ||||
1151 | } | ||||
1152 | | ||||
1149 | xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->root, p->atom(_NET_SUPPORTED), | 1153 | xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->root, p->atom(_NET_SUPPORTED), | ||
1150 | XCB_ATOM_ATOM, 32, pnum, (const void *) atoms); | 1154 | XCB_ATOM_ATOM, 32, pnum, (const void *) atoms); | ||
1151 | 1155 | | |||
1152 | xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->root, p->atom(_NET_SUPPORTING_WM_CHECK), | 1156 | xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->root, p->atom(_NET_SUPPORTING_WM_CHECK), | ||
1153 | XCB_ATOM_WINDOW, 32, 1, (const void *) & (p->supportwindow)); | 1157 | XCB_ATOM_WINDOW, 32, 1, (const void *) & (p->supportwindow)); | ||
1154 | 1158 | | |||
1155 | #ifdef NETWMDEBUG | 1159 | #ifdef NETWMDEBUG | ||
1156 | fprintf(stderr, | 1160 | fprintf(stderr, | ||
▲ Show 20 Lines • Show All 284 Lines • ▼ Show 20 Line(s) | 1176 | { | |||
1441 | 1445 | | |||
1442 | else if (atom == p->atom(_KDE_NET_WM_SHADOW)) { | 1446 | else if (atom == p->atom(_KDE_NET_WM_SHADOW)) { | ||
1443 | p->properties2 |= WM2KDEShadow; | 1447 | p->properties2 |= WM2KDEShadow; | ||
1444 | } | 1448 | } | ||
1445 | 1449 | | |||
1446 | else if (atom == p->atom(_NET_WM_OPAQUE_REGION)) { | 1450 | else if (atom == p->atom(_NET_WM_OPAQUE_REGION)) { | ||
1447 | p->properties2 |= WM2OpaqueRegion; | 1451 | p->properties2 |= WM2OpaqueRegion; | ||
1448 | } | 1452 | } | ||
1453 | | ||||
1454 | else if (atom == p->atom(_GTK_FRAME_EXTENTS)) { | ||||
1455 | p->properties2 |= WM2GTKFrameExtents; | ||||
1456 | } | ||||
1449 | } | 1457 | } | ||
1450 | 1458 | | |||
1451 | void NETRootInfo::setActiveWindow(xcb_window_t window) | 1459 | void NETRootInfo::setActiveWindow(xcb_window_t window) | ||
1452 | { | 1460 | { | ||
1453 | setActiveWindow(window, FromUnknown, QX11Info::appUserTime(), XCB_WINDOW_NONE); | 1461 | setActiveWindow(window, FromUnknown, QX11Info::appUserTime(), XCB_WINDOW_NONE); | ||
1454 | } | 1462 | } | ||
1455 | 1463 | | |||
1456 | void NETRootInfo::setActiveWindow(xcb_window_t window, NET::RequestSource src, | 1464 | void NETRootInfo::setActiveWindow(xcb_window_t window, NET::RequestSource src, | ||
▲ Show 20 Lines • Show All 2038 Lines • ▼ Show 20 Line(s) | 3502 | xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->window, p->atom(_NET_WM_FRAME_OVERLAP), | |||
3495 | XCB_ATOM_CARDINAL, 32, 4, (const void *) d); | 3503 | XCB_ATOM_CARDINAL, 32, 4, (const void *) d); | ||
3496 | } | 3504 | } | ||
3497 | 3505 | | |||
3498 | NETStrut NETWinInfo::frameOverlap() const | 3506 | NETStrut NETWinInfo::frameOverlap() const | ||
3499 | { | 3507 | { | ||
3500 | return p->frame_overlap; | 3508 | return p->frame_overlap; | ||
3501 | } | 3509 | } | ||
3502 | 3510 | | |||
3511 | void NETWinInfo::setGtkFrameExtents(NETStrut strut) | ||||
3512 | { | ||||
3513 | p->gtk_frame_extents = strut; | ||||
3514 | | ||||
3515 | uint32_t d[4]; | ||||
3516 | d[0] = strut.left; | ||||
3517 | d[1] = strut.right; | ||||
3518 | d[2] = strut.top; | ||||
3519 | d[3] = strut.bottom; | ||||
3520 | | ||||
3521 | xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->window, p->atom(_GTK_FRAME_EXTENTS), | ||||
3522 | XCB_ATOM_CARDINAL, 32, 4, (const void *) d); | ||||
3523 | } | ||||
3524 | | ||||
3525 | NETStrut NETWinInfo::gtkFrameExtents() const | ||||
3526 | { | ||||
3527 | return p->gtk_frame_extents; | ||||
3528 | } | ||||
3529 | | ||||
3503 | void NETWinInfo::kdeGeometry(NETRect &frame, NETRect &window) | 3530 | void NETWinInfo::kdeGeometry(NETRect &frame, NETRect &window) | ||
3504 | { | 3531 | { | ||
3505 | if (p->win_geom.size.width == 0 || p->win_geom.size.height == 0) { | 3532 | if (p->win_geom.size.width == 0 || p->win_geom.size.height == 0) { | ||
3506 | const xcb_get_geometry_cookie_t geometry_cookie | 3533 | const xcb_get_geometry_cookie_t geometry_cookie | ||
3507 | = xcb_get_geometry(p->conn, p->window); | 3534 | = xcb_get_geometry(p->conn, p->window); | ||
3508 | 3535 | | |||
3509 | const xcb_translate_coordinates_cookie_t translate_cookie | 3536 | const xcb_translate_coordinates_cookie_t translate_cookie | ||
3510 | = xcb_translate_coordinates(p->conn, p->window, p->root, 0, 0); | 3537 | = xcb_translate_coordinates(p->conn, p->window, p->root, 0, 0); | ||
▲ Show 20 Lines • Show All 302 Lines • ▼ Show 20 Line(s) | 3773 | #endif | |||
3813 | } else if (pe->atom == p->atom(WM_PROTOCOLS)) { | 3840 | } else if (pe->atom == p->atom(WM_PROTOCOLS)) { | ||
3814 | dirty2 |= WM2Protocols; | 3841 | dirty2 |= WM2Protocols; | ||
3815 | } else if (pe->atom == p->atom(_NET_WM_OPAQUE_REGION)) { | 3842 | } else if (pe->atom == p->atom(_NET_WM_OPAQUE_REGION)) { | ||
3816 | dirty2 |= WM2OpaqueRegion; | 3843 | dirty2 |= WM2OpaqueRegion; | ||
3817 | } else if (pe->atom == p->atom(_KDE_NET_WM_DESKTOP_FILE)) { | 3844 | } else if (pe->atom == p->atom(_KDE_NET_WM_DESKTOP_FILE)) { | ||
3818 | dirty2 = WM2DesktopFileName; | 3845 | dirty2 = WM2DesktopFileName; | ||
3819 | } else if (pe->atom == p->atom(_NET_WM_FULLSCREEN_MONITORS)) { | 3846 | } else if (pe->atom == p->atom(_NET_WM_FULLSCREEN_MONITORS)) { | ||
3820 | dirty2 = WM2FullscreenMonitors; | 3847 | dirty2 = WM2FullscreenMonitors; | ||
3848 | } else if (pe->atom == p->atom(_GTK_FRAME_EXTENTS)) { | ||||
3849 | dirty2 |= WM2GTKFrameExtents; | ||||
3821 | } | 3850 | } | ||
3822 | 3851 | | |||
3823 | do_update = true; | 3852 | do_update = true; | ||
3824 | } else if (eventType == XCB_CONFIGURE_NOTIFY) { | 3853 | } else if (eventType == XCB_CONFIGURE_NOTIFY) { | ||
3825 | 3854 | | |||
3826 | #ifdef NETWMDEBUG | 3855 | #ifdef NETWMDEBUG | ||
3827 | fprintf(stderr, "NETWinInfo::event: handling ConfigureNotify event\n"); | 3856 | fprintf(stderr, "NETWinInfo::event: handling ConfigureNotify event\n"); | ||
3828 | #endif | 3857 | #endif | ||
▲ Show 20 Lines • Show All 175 Lines • ▼ Show 20 Line(s) | 3907 | { | |||
4004 | if (dirty2 & WM2OpaqueRegion) { | 4033 | if (dirty2 & WM2OpaqueRegion) { | ||
4005 | cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_NET_WM_OPAQUE_REGION), XCB_ATOM_CARDINAL, 0, MAX_PROP_SIZE); | 4034 | cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_NET_WM_OPAQUE_REGION), XCB_ATOM_CARDINAL, 0, MAX_PROP_SIZE); | ||
4006 | } | 4035 | } | ||
4007 | 4036 | | |||
4008 | if (dirty2 & WM2DesktopFileName) { | 4037 | if (dirty2 & WM2DesktopFileName) { | ||
4009 | cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_KDE_NET_WM_DESKTOP_FILE), p->atom(UTF8_STRING), 0, MAX_PROP_SIZE); | 4038 | cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_KDE_NET_WM_DESKTOP_FILE), p->atom(UTF8_STRING), 0, MAX_PROP_SIZE); | ||
4010 | } | 4039 | } | ||
4011 | 4040 | | |||
4041 | if (dirty2 & WM2GTKFrameExtents) { | ||||
4042 | cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_GTK_FRAME_EXTENTS), XCB_ATOM_CARDINAL, 0, 4); | ||||
4043 | } | ||||
4044 | | ||||
4012 | c = 0; | 4045 | c = 0; | ||
4013 | 4046 | | |||
4014 | if (dirty & XAWMState) { | 4047 | if (dirty & XAWMState) { | ||
4015 | p->mapping_state = Withdrawn; | 4048 | p->mapping_state = Withdrawn; | ||
4016 | 4049 | | |||
4017 | bool success; | 4050 | bool success; | ||
4018 | uint32_t state = get_value_reply<uint32_t>(p->conn, cookies[c++], p->atom(WM_STATE), 0, &success); | 4051 | uint32_t state = get_value_reply<uint32_t>(p->conn, cookies[c++], p->atom(WM_STATE), 0, &success); | ||
4019 | 4052 | | |||
▲ Show 20 Lines • Show All 569 Lines • ▼ Show 20 Line(s) | 4621 | if (dirty2 & WM2DesktopFileName) { | |||
4589 | delete[] p->desktop_file; | 4622 | delete[] p->desktop_file; | ||
4590 | p->desktop_file = nullptr; | 4623 | p->desktop_file = nullptr; | ||
4591 | 4624 | | |||
4592 | const QByteArray id = get_string_reply(p->conn, cookies[c++], p->atom(UTF8_STRING)); | 4625 | const QByteArray id = get_string_reply(p->conn, cookies[c++], p->atom(UTF8_STRING)); | ||
4593 | if (id.length() > 0) { | 4626 | if (id.length() > 0) { | ||
4594 | p->desktop_file = nstrndup(id.constData(), id.length()); | 4627 | p->desktop_file = nstrndup(id.constData(), id.length()); | ||
4595 | } | 4628 | } | ||
4596 | } | 4629 | } | ||
4630 | | ||||
4631 | if (dirty2 & WM2GTKFrameExtents) { | ||||
4632 | p->gtk_frame_extents = NETStrut(); | ||||
4633 | | ||||
4634 | QVector<uint32_t> data = get_array_reply<uint32_t>(p->conn, cookies[c++], XCB_ATOM_CARDINAL); | ||||
4635 | if (data.count() == 4) { | ||||
4636 | p->gtk_frame_extents.left = data[0]; | ||||
4637 | p->gtk_frame_extents.right = data[1]; | ||||
4638 | p->gtk_frame_extents.top = data[2]; | ||||
4639 | p->gtk_frame_extents.bottom = data[3]; | ||||
4640 | } | ||||
4641 | } | ||||
4597 | } | 4642 | } | ||
4598 | 4643 | | |||
4599 | NETRect NETWinInfo::iconGeometry() const | 4644 | NETRect NETWinInfo::iconGeometry() const | ||
4600 | { | 4645 | { | ||
4601 | return p->icon_geom; | 4646 | return p->icon_geom; | ||
4602 | } | 4647 | } | ||
4603 | 4648 | | |||
4604 | NET::States NETWinInfo::state() const | 4649 | NET::States NETWinInfo::state() const | ||
▲ Show 20 Lines • Show All 312 Lines • Show Last 20 Lines |