mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Removing unfinished wm
This commit is contained in:
344
edewm/Frame.h
344
edewm/Frame.h
@ -1,344 +0,0 @@
|
||||
/*
|
||||
* $Id: Frame.h 1736 2006-08-19 00:38:53Z karijes $
|
||||
*
|
||||
* Edewm, window manager
|
||||
* Part of Equinox Desktop Environment (EDE).
|
||||
* Copyright (c) 2000-2006 EDE Authors.
|
||||
*
|
||||
* This program is licenced under terms of the
|
||||
* GNU General Public Licence version 2 or newer.
|
||||
* See COPYING for details.
|
||||
*/
|
||||
|
||||
#ifndef _FRAME_H_
|
||||
#define _FRAME_H_
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <efltk/Fl_Window.h>
|
||||
#include <efltk/Fl_Box.h>
|
||||
|
||||
#include "Cursor.h"
|
||||
|
||||
// frame states (internal)
|
||||
#define FrameStateNormal (1 << 0) // neither of below states
|
||||
#define FrameStateUnmapped (1 << 1) // or Withdrawn
|
||||
#define FrameStateDestroyed (1 << 2) // destroyed window, handled by WindowManager
|
||||
#define FrameStateFocused (1 << 3)
|
||||
|
||||
// frame states (netwm)
|
||||
#define FrameStateModal (1 << 4) // transients
|
||||
#define FrameStateSticky (1 << 5)
|
||||
#define FrameStateShaded (1 << 6)
|
||||
#define FrameStateHidden (1 << 7) // or iconized
|
||||
#define FrameStateIconized FrameStateHidden
|
||||
|
||||
/* These two types are used to emit _NET_WM_STATE_ABOVE and _NET_WM_STATE_BELOW.
|
||||
* For me it is unclear why they didn't called _NET_WM_STATE_ALWAYS_(ABOVE,BELOW)
|
||||
* since all wm's set them in this state (except transient who are always above all
|
||||
* windows), and stacking order can't be changed. Anyway, enjoy with more apropriate
|
||||
* names.
|
||||
*/
|
||||
#define FrameStateAlwaysAbove (1 << 8)
|
||||
#define FrameStateAlwaysBelow (1 << 9)
|
||||
|
||||
#define FrameStateMaximizedHorz (1 << 10)
|
||||
#define FrameStateMaximizedVert (1 << 11)
|
||||
#define FrameStateMaximized (FrameStateMaximizedHorz | FrameStateMaximizedVert)
|
||||
|
||||
// some options frame can have (or their combinations)
|
||||
/*
|
||||
#define FrameOptSkipList (1 << 0) // some reason why not in list
|
||||
#define FrameOptBorder (1 << 1)
|
||||
#define FrameOptThinBorder (1 << 2)
|
||||
#define FrameOptTitlebar (1 << 3)
|
||||
#define FrameOptSysmenu (1 << 4) // what a hell !?!?
|
||||
#define FrameOptMinimize (1 << 5)
|
||||
#define FrameOptMaxmize (1 << 6)
|
||||
#define FrameOptClose (1 << 7)
|
||||
#define FrameOptResize (1 << 8)
|
||||
#define FrameOptMove (1 << 9)
|
||||
#define FrameOptTakeFocus (1 << 10)
|
||||
#define FrameOptKeepAspect (1 << 11)
|
||||
*/
|
||||
|
||||
#define FrameOptSkipList (1 << 0)
|
||||
#define FrameOptHaveBorder (1 << 1)
|
||||
#define FrameOptHaveTitlebar (1 << 2)
|
||||
#define FrameOptResizeable (1 << 3)
|
||||
#define FrameOptMoveable (1 << 4)
|
||||
#define FrameOptCloseable (1 << 5)
|
||||
#define FrameOptHideable (1 << 6)
|
||||
#define FrameOptTakeFocus (1 << 7)
|
||||
#define FrameOptKeepAspect (1 << 8)
|
||||
|
||||
/* some events echo UnmapNotify, like ReparentNotify, and if we
|
||||
* start wm on existing X session with open windows, this flag will
|
||||
* prevent they be unmapped
|
||||
*/
|
||||
#define FrameOptIgnoreUnmap (1 << 12)
|
||||
|
||||
// frame type
|
||||
#define FrameTypeNormal 0
|
||||
#define FrameTypeDialog 1
|
||||
#define FrameTypeSplash 2
|
||||
#define FrameTypeDock 3
|
||||
#define FrameTypeToolbar 4
|
||||
#define FrameTypeMenu 5
|
||||
#define FrameTypeUtil 6
|
||||
#define FrameTypeDesktop 7
|
||||
|
||||
// type of resizing; means from which
|
||||
// side of window is resize doing
|
||||
#define ResizeTypeNone (1 << 0)
|
||||
#define ResizeTypeLeft (1 << 1)
|
||||
#define ResizeTypeRight (1 << 2)
|
||||
#define ResizeTypeUp (1 << 3)
|
||||
#define ResizeTypeDown (1 << 4)
|
||||
#define ResizeTypeUpLeft (ResizeTypeUp | ResizeTypeLeft)
|
||||
#define ResizeTypeDownLeft (ResizeTypeDown | ResizeTypeLeft)
|
||||
#define ResizeTypeUpRight (ResizeTypeUp | ResizeTypeRight)
|
||||
#define ResizeTypeDownRight (ResizeTypeDown | ResizeTypeRight)
|
||||
#define ResizeTypeAll (ResizeTypeUp | ResizeTypeDown | ResizeTypeLeft | ResizeTypeRight)
|
||||
|
||||
// type of recalc_geometry()
|
||||
#define GeometryRecalcAll 0
|
||||
#define GeometryRecalcAllXY 1 // recalc all, except for plain w and h
|
||||
#define GeometryRecalcPlain 2
|
||||
|
||||
// now lets go to code...
|
||||
|
||||
// window sizes without borders, titlebar etc.
|
||||
struct WindowGeometry
|
||||
{
|
||||
int x, y, w, h;
|
||||
int offset_x, offset_y;
|
||||
int min_w, min_h;
|
||||
int max_w, max_h;
|
||||
int inc_w, inc_h;
|
||||
int border;
|
||||
};
|
||||
|
||||
struct FrameData
|
||||
{
|
||||
Window window;
|
||||
Window transient_win;
|
||||
Colormap colormap;
|
||||
|
||||
WindowGeometry plain;
|
||||
|
||||
Pixmap icon_pixmap;
|
||||
Pixmap icon_mask;
|
||||
char* label;
|
||||
bool label_alocated;
|
||||
long state;
|
||||
long option;
|
||||
short type;
|
||||
|
||||
int win_gravity;
|
||||
bool autoplace;
|
||||
bool have_transient;
|
||||
|
||||
// Icon* icon;
|
||||
};
|
||||
|
||||
struct Overlay
|
||||
{
|
||||
int x, y, w, h;
|
||||
GC inverted_gc;
|
||||
};
|
||||
|
||||
enum FrameBordersState
|
||||
{
|
||||
FOCUSED = 1,
|
||||
UNFOCUSED,
|
||||
CLICKED
|
||||
};
|
||||
|
||||
class FrameBorders
|
||||
{
|
||||
private:
|
||||
Fl_Color focused;
|
||||
Fl_Color unfocused;
|
||||
Fl_Color clicked;
|
||||
Fl_Color sizers_focused;
|
||||
Fl_Color sizers_unfocused;
|
||||
Fl_Color sizers_clicked;
|
||||
int updown_w;
|
||||
int updown2x_w;
|
||||
int leftright_h;
|
||||
int leftright2x_h;
|
||||
bool is_shaped;
|
||||
bool is_border;
|
||||
void item_color(Fl_Color c, FrameBordersState s, bool is_border);
|
||||
Fl_Color item_color(FrameBordersState s, bool is_border);
|
||||
|
||||
public:
|
||||
void border_color(Fl_Color c, FrameBordersState s) { item_color(c, s, true); }
|
||||
void sizers_color(Fl_Color c, FrameBordersState s) { item_color(c, s, false); }
|
||||
void updown(int s);
|
||||
void leftright(int s);
|
||||
void shaped(bool s);
|
||||
|
||||
Fl_Color border_color(FrameBordersState s) { return item_color(s, true); }
|
||||
Fl_Color sizers_color(FrameBordersState s) { return item_color(s, false); }
|
||||
int updown(void) { return updown_w; }
|
||||
int updown2x(void) { return updown2x_w; }
|
||||
int leftright(void) { return leftright_h; }
|
||||
int leftright2x(void) { return leftright2x_h; }
|
||||
bool shaped(void) { return is_shaped; }
|
||||
};
|
||||
|
||||
/* Window responsible for displaying parent
|
||||
* coordinates. It will _not_ be framed.
|
||||
*/
|
||||
class CoordinatesView : public Fl_Window
|
||||
{
|
||||
private:
|
||||
char data[100];
|
||||
Fl_Box* data_box;
|
||||
public:
|
||||
CoordinatesView();
|
||||
~CoordinatesView();
|
||||
void display_data(int x, int y, int w, int h);
|
||||
};
|
||||
|
||||
|
||||
class Titlebar;
|
||||
class FrameEventHandler;
|
||||
|
||||
// Head honcho of everything
|
||||
class Frame : public Fl_Window
|
||||
{
|
||||
private:
|
||||
friend class FrameEventHandler;
|
||||
|
||||
FrameData* fdata;
|
||||
int screen_x, screen_y, screen_w, screen_h;
|
||||
// sizes used when we do restore()
|
||||
int restore_x, restore_y, restore_w, restore_h;
|
||||
|
||||
bool opaque_move_resize;
|
||||
bool show_titlebar;
|
||||
bool is_moving;
|
||||
bool is_resizing;
|
||||
bool cursor_grabbed;
|
||||
bool snap_move;
|
||||
bool show_coordinates;
|
||||
|
||||
FrameBorders borders;
|
||||
FrameEventHandler* events;
|
||||
|
||||
Titlebar* titlebar;
|
||||
|
||||
Fl_Box* sizer_top_left;
|
||||
Fl_Box* sizer_top_right;
|
||||
Fl_Box* sizer_bottom_left;
|
||||
Fl_Box* sizer_bottom_right;
|
||||
|
||||
CoordinatesView* cview;
|
||||
|
||||
Overlay overlay;
|
||||
|
||||
// private loaders
|
||||
void feed_data(XWindowAttributes* attrs);
|
||||
//void load_wm_hints(void);
|
||||
/* void load_size_hints(void); */
|
||||
void load_label(void);
|
||||
|
||||
// preparers
|
||||
void setup_borders(void);
|
||||
// void init_sizes(void);
|
||||
void init_overlay(int border_size);
|
||||
void reparent_window(void);
|
||||
void place_sizers(int x, int y, int w, int h);
|
||||
long resize_type(int x, int y);
|
||||
|
||||
void recalc_geometry(int x, int y, int w, int h, short rtype);
|
||||
void configure_notify(void);
|
||||
void shape_borders(void);
|
||||
void shape_edges(void);
|
||||
|
||||
void show_sizers(void);
|
||||
void hide_sizers(void);
|
||||
|
||||
void draw_overlay(int x, int y, int w, int h);
|
||||
void clear_overlay(void);
|
||||
|
||||
// this is here so FrameEventHandler can access Fl_Window
|
||||
int handle_parent(int event);
|
||||
|
||||
Frame(const Frame&);
|
||||
Frame operator=(const Frame&);
|
||||
|
||||
public:
|
||||
Frame(Window, XWindowAttributes* = 0);
|
||||
~Frame();
|
||||
|
||||
Window window(void) { return fdata->window; }
|
||||
Window transient_window(void) { return fdata->transient_win; }
|
||||
|
||||
void settings_changed(void) { }
|
||||
int handle(int e);
|
||||
int handle(XEvent* e);
|
||||
void destroy(void);
|
||||
void display_internals(void);
|
||||
void content_click(void);
|
||||
|
||||
bool frame_type(short t) { return ((fdata->type == t) ? true : false); }
|
||||
|
||||
void set_state(long s) { fdata->state |= s; }
|
||||
bool state(long s) { return ((fdata->state & s) == s) ? true : false; }
|
||||
void clear_state(long s) { fdata->state &= ~s; }
|
||||
void clear_all_states(void) { fdata->state = 0; }
|
||||
|
||||
void set_option(long o) { fdata->option |= o; }
|
||||
bool option(long o) { return ((fdata->option & o) == o) ? true : false; }
|
||||
void clear_option(long o) { fdata->option &= ~o; }
|
||||
void clear_all_options(void) { fdata->option = 0; }
|
||||
|
||||
// public loaders
|
||||
void load_colormap(Colormap col = 0);
|
||||
|
||||
// window manipulators
|
||||
void set_size(int x, int y, int w, int h, bool apply_on_plain);
|
||||
void move_window(int x, int y);
|
||||
void resize_window(int mouse_x, int mouse_y, long direction);
|
||||
void maximize(void);
|
||||
void restore(void);
|
||||
void shade(void);
|
||||
void unshade(void);
|
||||
void close_kill(void);
|
||||
void focus(void);
|
||||
void unfocus(void);
|
||||
void raise(void);
|
||||
void lower(void);
|
||||
void borders_color(FrameBordersState s);
|
||||
void set_cursor(CursorType t);
|
||||
// void change_window_type(short t);
|
||||
void map(void);
|
||||
void unmap(void);
|
||||
|
||||
void show_coordinates_window(void);
|
||||
void update_coordinates_window(void);
|
||||
void hide_coordinates_window(void);
|
||||
|
||||
//const FrameBorders& frame_borders(void) { return borders; }
|
||||
|
||||
/* These function are used to determine how Frame
|
||||
* will dispatch events between titlebar and sizers
|
||||
*/
|
||||
void move_start(void) { is_moving = true; }
|
||||
void move_end(void) { is_moving = false; }
|
||||
bool moving(void) { return is_moving; }
|
||||
void resize_start(void) { is_resizing = true; }
|
||||
void resize_end(void) { is_resizing = false; }
|
||||
bool resizing(void) { return is_resizing; }
|
||||
|
||||
// TODO: should this be in WindowManager or here ???
|
||||
void grab_cursor(void);
|
||||
void ungrab_cursor(void);
|
||||
|
||||
bool destroy_scheduled(void) { return state(FrameStateDestroyed); }
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user