| 175 ui_set_visible(window->menubar, visible); |
175 ui_set_visible(window->menubar, visible); |
| 176 } |
176 } |
| 177 } else { |
177 } else { |
| 178 fprintf(stderr, "Error: obj is not an application window\n"); |
178 fprintf(stderr, "Error: obj is not an application window\n"); |
| 179 } |
179 } |
| |
180 } |
| |
181 |
| |
182 static Atom net_wm_state; |
| |
183 static Atom net_wm_state_fullscreen; |
| |
184 static int net_wm_atoms_initialized = 0; |
| |
185 |
| |
186 void ui_window_fullscreen(UiObject *obj, UiBool fullscreen) { |
| |
187 Display *dpy = XtDisplay(obj->widget); |
| |
188 |
| |
189 // init net_wm_state atoms |
| |
190 if(!net_wm_atoms_initialized) { |
| |
191 net_wm_state = XInternAtom(dpy, "_NET_WM_STATE", False); |
| |
192 net_wm_state_fullscreen = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); |
| |
193 net_wm_atoms_initialized = 1; |
| |
194 } |
| |
195 |
| |
196 XEvent ev; |
| |
197 memset(&ev, 0, sizeof(XEvent)); |
| |
198 ev.type = ClientMessage; |
| |
199 ev.xclient.window = XtWindow(obj->widget); |
| |
200 ev.xclient.message_type = net_wm_state; |
| |
201 ev.xclient.format = 32; |
| |
202 ev.xclient.data.l[0] = fullscreen ? 1 : 0; |
| |
203 ev.xclient.data.l[1] = net_wm_state_fullscreen; |
| |
204 ev.xclient.data.l[2] = 0; |
| |
205 XSendEvent(dpy, DefaultRootWindow(dpy), False, SubstructureNotifyMask | SubstructureRedirectMask, &ev); |
| 180 } |
206 } |
| 181 |
207 |
| 182 static void filedialog_event(UiEventData *event, int result, UiFileList flist) { |
208 static void filedialog_event(UiEventData *event, int result, UiFileList flist) { |
| 183 UiEvent evt; |
209 UiEvent evt; |
| 184 evt.obj = event->obj; |
210 evt.obj = event->obj; |