1/* XDesktopWindow.m
2 *
3 * Copyright (C) 2005 Free Software Foundation, Inc.
4 *
5 * Author: Enrico Sersale <enrico@imago.ro>
6 * Date: January 2005
7 *
8 * This file is part of the GNUstep GWorkspace application
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA.
23 */
24
25#include <Foundation/Foundation.h>
26#include <AppKit/AppKit.h>
27#include <GNUstepGUI/GSDisplayServer.h>
28#include <X11/Xlib.h>
29#include <X11/Xatom.h>
30#include "XDesktopWindow.h"
31
32@implementation XDesktopWindow
33
34- (void)dealloc
35{
36  [super dealloc];
37}
38
39- (id)init
40{
41	self = [super initWithContentRect: [[NSScreen mainScreen] frame]
42                          styleMask: NSBorderlessWindowMask
43				  						      backing: NSBackingStoreBuffered
44                              defer: NO];
45	if (self) {
46    [self setReleasedWhenClosed: NO];
47    [self setExcludedFromWindowsMenu: YES];
48    [self setAcceptsMouseMovedEvents: YES];
49    [self setCanHide: NO];
50	}
51
52	return self;
53}
54
55- (void)activate
56{
57  GSDisplayServer *server = GSCurrentServer();
58  Display *dpy = (Display *)[server serverDevice];
59  void *winptr = [server windowDevice: [self windowNumber]];
60  Window win = *(Window *)winptr;
61  Atom atom = 0;
62  long data = 1;
63
64  atom = XInternAtom(dpy, "KWM_WIN_STICKY", False);
65
66  XChangeProperty(dpy, win, atom, atom, 32,
67                        PropModeReplace, (unsigned char *)&data, 1);
68
69  atom = XInternAtom(dpy, "WIN_STATE_STICKY", False);
70
71  XChangeProperty(dpy, win, atom, atom, 32,
72                        PropModeReplace, (unsigned char *)&data, 1);
73
74  [self orderFront: nil];
75}
76
77- (void)deactivate
78{
79  [self orderOut: self];
80}
81
82- (id)desktopView
83{
84  return [self contentView];
85}
86
87- (void)openSelection:(id)sender
88{
89  [delegate openSelectionInNewViewer: NO];
90}
91
92- (void)openSelectionAsFolder:(id)sender
93{
94  [delegate openSelectionAsFolder];
95}
96
97- (void)openWith:(id)sender
98{
99  [delegate openSelectionWith];
100}
101
102- (void)newFolder:(id)sender
103{
104  [delegate newFolder];
105}
106
107- (void)newFile:(id)sender
108{
109  [delegate newFile];
110}
111
112- (void)duplicateFiles:(id)sender
113{
114  [delegate duplicateFiles];
115}
116
117- (void)recycleFiles:(id)sender
118{
119  [delegate recycleFiles];
120}
121
122- (void)deleteFiles:(id)sender
123{
124  [delegate deleteFiles];
125}
126
127- (void)setShownType:(id)sender
128{
129  [delegate setShownType: sender];
130}
131
132- (void)setExtendedShownType:(id)sender
133{
134  [delegate setExtendedShownType: sender];
135}
136
137- (void)setIconsSize:(id)sender
138{
139  [delegate setIconsSize: sender];
140}
141
142- (void)setIconsPosition:(id)sender
143{
144  [delegate setIconsPosition: sender];
145}
146
147- (void)setLabelSize:(id)sender
148{
149  [delegate setLabelSize: sender];
150}
151
152- (void)chooseLabelColor:(id)sender
153{
154  [delegate chooseLabelColor: sender];
155}
156
157- (void)chooseBackColor:(id)sender
158{
159  [delegate chooseBackColor: sender];
160}
161
162- (void)selectAllInViewer:(id)sender
163{
164  [delegate selectAllInViewer];
165}
166
167- (void)showAnnotationWindows:(id)sender
168{
169  [delegate showAnnotationWindows];
170}
171
172- (void)showTerminal:(id)sender
173{
174  [delegate showTerminal];
175}
176
177- (void)keyDown:(NSEvent *)theEvent
178{
179	[super keyDown: theEvent];
180}
181
182- (void)setDelegate:(id)adelegate
183{
184  delegate = adelegate;
185  [super setDelegate: adelegate];
186}
187
188- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem
189{
190  return [delegate validateItem: menuItem];
191}
192
193- (void)print:(id)sender
194{
195	[super print: sender];
196}
197
198- (void)orderWindow:(NSWindowOrderingMode)place
199         relativeTo:(NSInteger)otherWin
200{
201  [super orderWindow: place relativeTo: otherWin];
202  [self setLevel: NSDesktopWindowLevel];
203}
204
205- (BOOL)canBecomeKeyWindow
206{
207	return YES;
208}
209
210- (BOOL)canBecomeMainWindow
211{
212	return YES;
213}
214
215@end
216