diff --git a/CMakeLists.txt b/CMakeLists.txt
index 97cfb72dc..00732635d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -58,7 +58,6 @@ set(AWE_SRCS
${SOURCE_DIR}/objects/wibox.c
${SOURCE_DIR}/systray.c
${SOURCE_DIR}/objects/tag.c
- ${SOURCE_DIR}/titlebar.c
${SOURCE_DIR}/objects/widget.c
${SOURCE_DIR}/window.c
${SOURCE_DIR}/image.c
diff --git a/awesome.c b/awesome.c
index d7b3212ba..bac38a74d 100644
--- a/awesome.c
+++ b/awesome.c
@@ -39,7 +39,6 @@
#include "event.h"
#include "property.h"
#include "screen.h"
-#include "titlebar.h"
#include "luaa.h"
#include "common/version.h"
#include "common/atoms.h"
@@ -87,10 +86,7 @@ awesome_atexit(void)
/* remap all clients since some WM won't handle them otherwise */
foreach(c, globalconf.clients)
- {
client_unban(*c);
- titlebar_client_detach(*c);
- }
/* Close Lua */
lua_close(globalconf.L);
diff --git a/awesomerc.lua.in b/awesomerc.lua.in
index 4b582d5c9..0aea3c2d3 100644
--- a/awesomerc.lua.in
+++ b/awesomerc.lua.in
@@ -305,9 +305,6 @@ awful.rules.rules = {
-- {{{ Signals
-- Signal function to execute when a new client appears.
client.add_signal("manage", function (c, startup)
- -- Add a titlebar
- -- awful.titlebar.add(c, { modkey = modkey })
-
-- Enable sloppy focus
c:add_signal("mouse::enter", function(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
diff --git a/banning.c b/banning.c
index 2349ef371..b6cafd62f 100644
--- a/banning.c
+++ b/banning.c
@@ -22,7 +22,6 @@
#include "banning.h"
#include "objects/tag.h"
#include "window.h"
-#include "titlebar.h"
#include "screen.h"
/** Reban windows following current selected tags.
@@ -56,31 +55,16 @@ reban(screen_t *screen)
client_ignore_enterleave_events();
- foreach(_c, globalconf.clients)
- {
- client_t *c = *_c;
-
- /* Restore titlebar before client, so geometry is ok again. */
- if(titlebar_isvisible(c, screen))
- titlebar_unban(c->titlebar);
-
- if(client_isvisible(c, screen))
- client_unban(c);
- }
+ foreach(c, globalconf.clients)
+ if(client_isvisible(*c, screen))
+ client_unban(*c);
/* Some people disliked the short flicker of background, so we first unban everything.
* Afterwards we ban everything we don't want. This should avoid that. */
- foreach(_c, globalconf.clients)
- {
- client_t *c = *_c;
-
- if(!titlebar_isvisible(c, screen) && c->screen == screen)
- titlebar_ban(c->titlebar);
-
+ foreach(c, globalconf.clients)
/* we don't touch other screens windows */
- if(!client_isvisible(c, screen) && c->screen == screen)
- client_ban(c);
- }
+ if(!client_isvisible(*c, screen) && (*c)->screen == screen)
+ client_ban(*c);
client_restore_enterleave_events();
}
diff --git a/common/tokenize.gperf b/common/tokenize.gperf
index 724ed6be5..00e4128a3 100644
--- a/common/tokenize.gperf
+++ b/common/tokenize.gperf
@@ -19,7 +19,6 @@ button_release
center
char
class
-client
conffile
content
Control
@@ -75,7 +74,6 @@ orientation
pid
plot_data_add
plot_properties_set
-position
release
resize
right
@@ -100,7 +98,6 @@ textbox
ticks_count
ticks_gap
timeout
-titlebar
top
transient_for
type
diff --git a/event.c b/event.c
index 7603eb5e4..37d75a6be 100644
--- a/event.c
+++ b/event.c
@@ -32,7 +32,6 @@
#include "ewmh.h"
#include "objects/client.h"
#include "objects/widget.h"
-#include "titlebar.h"
#include "objects/key.h"
#include "keygrabber.h"
#include "mousegrabber.h"
@@ -250,11 +249,10 @@ event_handle_configurerequest(void *data __attribute__ ((unused)),
xcb_connection_t *connection, xcb_configure_request_event_t *ev)
{
client_t *c;
- area_t geometry;
if((c = client_getbywin(ev->window)))
{
- geometry = titlebar_geometry_remove(c->titlebar, c->border_width, c->geometry);
+ area_t geometry = c->geometries.internal;
if(ev->value_mask & XCB_CONFIG_WINDOW_X)
geometry.x = ev->x;
@@ -277,13 +275,14 @@ event_handle_configurerequest(void *data __attribute__ ((unused)),
XCB_CONFIG_WINDOW_STACK_MODE);
/** Configure request are sent with size relative to real (internal)
- * window size, i.e. without titlebars and borders. */
- geometry = titlebar_geometry_add(c->titlebar, c->border_width, geometry);
+ * window size, i.e. without borders. */
+ geometry.width += 2 * c->border_width;
+ geometry.height += 2 * c->border_width;
if(!client_resize(c, geometry, false))
{
- /* Resize wasn't officially needed, but we don't want to break expectations. */
- geometry = titlebar_geometry_remove(c->titlebar, c->border_width, c->geometry);
+ geometry.width -= 2 * c->border_width;
+ geometry.height -= 2 * c->border_width;
window_configure(c->window, geometry, c->border_width);
}
}
@@ -415,7 +414,7 @@ event_handle_leavenotify(void *data __attribute__ ((unused)),
if(ev->mode != XCB_NOTIFY_MODE_NORMAL)
return 0;
- if((c = client_getbytitlebarwin(ev->event)) || (c = client_getbywin(ev->event)))
+ if((c = client_getbywin(ev->event)))
{
luaA_object_push(globalconf.L, c);
luaA_object_emit_signal(globalconf.L, -1, "mouse::leave", 0);
@@ -471,8 +470,7 @@ event_handle_enternotify(void *data __attribute__ ((unused)),
lua_pop(globalconf.L, 1);
}
- if((c = client_getbytitlebarwin(ev->event))
- || (c = client_getbywin(ev->event)))
+ if((c = client_getbywin(ev->event)))
{
luaA_object_push(globalconf.L, c);
luaA_object_emit_signal(globalconf.L, -1, "mouse::enter", 0);
@@ -492,8 +490,6 @@ event_handle_focusin(void *data __attribute__ ((unused)),
xcb_connection_t *connection,
xcb_focus_in_event_t *ev)
{
- client_t *c;
-
/* Events that we are interested in: */
switch(ev->detail)
{
@@ -507,9 +503,12 @@ event_handle_focusin(void *data __attribute__ ((unused)),
*/
case XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL:
case XCB_NOTIFY_DETAIL_NONLINEAR:
- if((c = client_getbytitlebarwin(ev->event))
- || (c = client_getbywin(ev->event)))
+ {
+ client_t *c;
+
+ if((c = client_getbywin(ev->event)))
client_focus_update(c);
+ }
/* all other events are ignored */
default:
break;
diff --git a/lib/awful/init.lua.in b/lib/awful/init.lua.in
index 66c2e6806..38e8b5420 100644
--- a/lib/awful/init.lua.in
+++ b/lib/awful/init.lua.in
@@ -11,7 +11,6 @@ require("awful.placement")
require("awful.prompt")
require("awful.screen")
require("awful.tag")
-require("awful.titlebar")
require("awful.util")
require("awful.widget")
require("awful.menu")
diff --git a/lib/awful/layout/init.lua.in b/lib/awful/layout/init.lua.in
index 963582e4e..065dc449e 100644
--- a/lib/awful/layout/init.lua.in
+++ b/lib/awful/layout/init.lua.in
@@ -105,7 +105,6 @@ capi.client.add_signal("new", function(c)
c:add_signal("property::maximized_vertical", arrange_prop)
c:add_signal("property::border_width", arrange_prop)
c:add_signal("property::hidden", arrange_prop)
- c:add_signal("property::titlebar", arrange_prop)
c:add_signal("property::floating", arrange_prop)
c:add_signal("property::geometry", arrange_prop)
-- If prop is screen, we do not know what was the previous screen, so
diff --git a/lib/awful/titlebar.lua.in b/lib/awful/titlebar.lua.in
deleted file mode 100644
index 38d4c5631..000000000
--- a/lib/awful/titlebar.lua.in
+++ /dev/null
@@ -1,422 +0,0 @@
----------------------------------------------------------------------------
--- @author Julien Danjou <julien@danjou.info>
--- @copyright 2008 Julien Danjou
--- @release @AWESOME_VERSION@
----------------------------------------------------------------------------
-
--- Grab environment we need
-local math = math
-local image = image
-local pairs = pairs
-local type = type
-local setmetatable = setmetatable
-local type = type
-local capi =
-{
- awesome = awesome,
- wibox = wibox,
- widget = widget,
- client = client,
-}
-local abutton = require("awful.button")
-local beautiful = require("beautiful")
-local util = require("awful.util")
-local widget = require("awful.widget")
-local mouse = require("awful.mouse")
-local client = require("awful.client")
-local layout = require("awful.widget.layout")
-
---- Titlebar module for awful
-module("awful.titlebar")
-
--- Privata data
-local data = setmetatable({}, { __mode = 'k' })
-
--- Predeclaration for buttons
-local button_groups
-
-local function button_callback_focus_raise_move(w, t)
- capi.client.focus = t.client
- t.client:raise()
- mouse.client.move(t.client)
-end
-
-local function button_callback_move(w, t)
- return mouse.client.move(t.client)
-end
-
-local function button_callback_resize(w, t)
- return mouse.client.resize(t.client)
-end
-
---- Create a standard titlebar.
--- @param c The client.
--- @param args Arguments.
--- modkey: the modkey used for the bindings.
--- fg: the foreground color.
--- bg: the background color.
--- fg_focus: the foreground color for focused window.
--- fg_focus: the background color for focused window.
--- width: the titlebar width
-function add(c, args)
- if not c or (c.type ~= "normal" and c.type ~= "dialog") then return end
- if not args then args = {} end
- if not args.height then args.height = capi.awesome.font_height * 1.5 end
- local theme = beautiful.get()
- if not args.widget then customwidget = {} else customwidget = args.widget end
- -- Store colors
- data[c] = {}
- data[c].fg = args.fg or theme.titlebar_fg_normal or theme.fg_normal
- data[c].bg = args.bg or theme.titlebar_bg_normal or theme.bg_normal
- data[c].fg_focus = args.fg_focus or theme.titlebar_fg_focus or theme.fg_focus
- data[c].bg_focus = args.bg_focus or theme.titlebar_bg_focus or theme.bg_focus
- data[c].width = args.width
- data[c].font = args.font or theme.titlebar_font or theme.font
-
- local tb = capi.wibox(args)
-
- local title = capi.widget({ type = "textbox" })
- if c.name then
- title.text = " " ..
- util.escape(c.name) .. " "
- end
-
- -- Redirect relevant events to the client the titlebar belongs to
- local bts = util.table.join(
- abutton({ }, 1, button_callback_focus_raise_move),
- abutton({ args.modkey }, 1, button_callback_move),
- abutton({ args.modkey }, 3, button_callback_resize))
- title:buttons(bts)
-
- local appicon = capi.widget({ type = "imagebox" })
- appicon.image = c.icon
-
- -- for each button group, call create for the client.
- -- if a button set is created add the set to the
- -- data[c].button_sets for late updates and add the
- -- individual buttons to the array part of the widget
- -- list
- local widget_list = {
- layout = layout.horizontal.rightleft
- }
- local iw = 1
- local is = 1
- data[c].button_sets = {}
- for i = 1, #button_groups do
- local set = button_groups[i].create(c, args.modkey, theme)
- if (set) then
- data[c].button_sets[is] = set
- is = is + 1
- for n,b in pairs(set) do
- widget_list[iw] = b
- iw = iw + 1
- end
- end
- end
-
- tb.widgets = {
- widget_list,
- customwidget,
- {
- appicon = appicon,
- title = title,
- layout = layout.horizontal.flex
- },
- layout = layout.horizontal.rightleft
- }
-
- c.titlebar = tb
-
- c:add_signal("property::icon", update)
- c:add_signal("property::name", update)
- c:add_signal("property::sticky", update)
- c:add_signal("property::floating", update)
- c:add_signal("property::ontop", update)
- c:add_signal("property::maximized_vertical", update)
- c:add_signal("property::maximized_horizontal", update)
- update(c)
-end
-
---- Update a titlebar. This should be called in some hooks.
--- @param c The client to update.
--- @param prop The property name which has changed.
-function update(c)
- if c.titlebar and data[c] then
- local widgets = c.titlebar.widgets
- if widgets[3].title then
- widgets[3].title.text = " ".. util.escape(c.name or "") .. " "
- end
- if widgets[3].appicon then
- widgets[3].appicon.image = c.icon
- end
- if capi.client.focus == c then
- c.titlebar.fg = data[c].fg_focus
- c.titlebar.bg = data[c].bg_focus
- else
- c.titlebar.fg = data[c].fg
- c.titlebar.bg = data[c].bg
- end
-
- -- iterated of all registered button_sets and update
- local sets = data[c].button_sets
- for i = 1, #sets do
- sets[i].update(c,prop)
- end
- end
-end
-
---- Remove a titlebar from a client.
--- @param c The client.
-function remove(c)
- c.titlebar = nil
- data[c] = nil
-end
-
--- Create a new button for the toolbar
--- @param c The client of the titlebar
--- @param name The base name of the button (i.e. close)
--- @param modkey ... you know that one, don't you?
--- @param theme The theme from beautifull. Used to get the image paths
--- @param state The state the button is associated to. Containse path the action and info about the image
-local function button_new(c, name, modkey, theme, state)
- local bts = abutton({ }, 1, nil, state.action)
-
- -- get the image path from the theme. Only return a button if we find an image
- local img
- img = "titlebar_" .. name .. "_button_" .. state.img
- img = theme[img]
- if not img then return end
- img = image(img)
- if not img then return end
-
- -- now create the button
- local bname = name .. "_" .. state.idx
- local button = widget.button({ image = img })
- if not button then return end
- local rbts = button:buttons()
-
- for k, v in pairs(rbts) do
- bts[#bts + 1] = v
- end
-
- button:buttons(bts)
- button.visible = false
- return button
-end
-
--- Update the buttons in a button group
--- @param s The button group to update
--- @param c The client of the titlebar
--- @param p The property that has changed
-local function button_group_update(s,c,p)
- -- hide the currently active button, get the new state and show the new button
- local n = s.select_state(c,p)
- if n == nil then return end
- if (s.active ~= nil) then s.active.visible = false end
- s.active = s.buttons[n]
- s.active.visible = true
-end
-
--- Create all buttons in a group
--- @param c The client of the titlebar
--- @param group The button group to create the buttons for
--- @param modkey ...
--- @param theme Theme for the image paths
-local function button_group_create(c, group, modkey, theme )
- local s = {}
- s.name = group.name
- s.select_state = group.select_state
- s.buttons = {
- layout = layout.horizontal.rightleft
- }
- for n,state in pairs(group.states) do
- s.buttons[n] = button_new(c, s.name, modkey, theme, state)
- if (s.buttons[n] == nil) then return end
- for a,v in pairs(group.attributes) do
- s.buttons[n][a] = v
- end
- end
- function s.update(c,p) button_group_update(s,c,p) end
- return s
-end
-
--- Builds a new button group
--- @param name The base name for the buttons in the group (i.e. "close")
--- @param attrs Common attributes for the buttons (i.e. {align = "right")
--- @param sfn State select function.
--- @param args The states of the button
-local function button_group(name, attrs, sfn, ...)
- local s = {}
- s.name = name
- s.select_state = sfn
- s.attributes = attrs
- s.states = {}
-
- for i = 1, #arg do
- local state = arg[i]
- s.states[state.idx] = state
- end
-
- function s.create(c,modkey, theme) return button_group_create(c,s,modkey, theme) end
- return s
-end
-
--- Select a state for a client based on an attribute of the client and whether it has focus
--- @param c The client of the titlebar
--- @param p The property that has changed
--- @param a The property to check
-local function select_state(c,p,a)
- if (c == nil) then return "n/i" end
- if capi.client.focus == c then
- if c[a] then
- return "f/a"
- else
- return "f/i"
- end
- else
- if c[a] then
- return "n/a"
- else
- return "n/i"
- end
- end
-end
-
--- Select a state for a client based on whether it's floating or not
--- @param c The client of the titlebar
--- @param p The property that has changed
-local function select_state_floating(c,p)
- if not c then return end
- if capi.client.focus == c then
- if client.floating.get(c) then
- return "f/a"
- end
- return "f/i"
- end
- if client.floating.get(c) then
- return "n/a"
- end
- return "n/i"
-end
-
--- Select a state for a client based on whether it's maximized or not
--- @param c The client of the titlebar
--- @param p The property that has changed
-local function select_state_maximized(c,p)
- if (c == nil) then return "n/i" end
- if capi.client.focus == c then
- if c.maximized_horizontal or c.maximized_vertical then
- return "f/a"
- else
- return "f/i"
- end
- else
- if c.maximized_horizontal or c.maximized_vertical then
- return "n/a"
- else
- return "n/i"
- end
- end
-end
-
--- Select a state for a client based on whether it has focus or not
--- @param c The client of the titlebar
--- @param p The property that has changed
-local function select_state_focus(c,p)
- if c and capi.client.focus == c then
- return "f"
- end
- return "n"
-end
-
--- These are the predefined button groups
--- A short explanation using 'close_buttons' as an example:
--- "close" : name of the button, the images for this button are taken from the
--- theme variables titlebar_close_button_...
--- { align ... : attributes of all the buttons
--- select_state_focus : This function returns a short string used to describe
--- the state. In this case either "n" or "f" depending on
--- the focus state of the client. These strings can be
--- choosen freely but the< must match one of the idx fuekds
--- of the states below
--- { idx = "n" ... : This is the state of the button for the 'unfocussed'
--- (normal) state. The idx = "n" parameter connects this
--- button to the return value of the 'select_state_focus'
--- function. The img = "normal" parameter is used to
--- determine its image. In this case the iamge is taken from
--- the theme variable "titlebar_close_button_normal".
--- Finally the last parameter is the action for mouse
--- button 1
-
-local ontop_buttons = button_group("ontop",
- { align = "right" },
- function(c,p) return select_state(c, p, "ontop") end,
- { idx = "n/i", img = "normal_inactive",
- action = function(w, t) t.client.ontop = true end },
- { idx = "f/i", img = "focus_inactive",
- action = function(w, t) t.client.ontop = true end },
- { idx = "n/a", img = "normal_active",
- action = function(w, t) t.client.ontop = false end },
- { idx = "f/a", img = "focus_active",
- action = function(w, t) t.client.ontop = false end })
-
-local sticky_buttons = button_group("sticky",
- { align = "right" },
- function(c,p) return select_state(c,p,"sticky") end,
- { idx = "n/i", img = "normal_inactive",
- action = function(w, t) t.client.sticky = true end },
- { idx = "f/i", img = "focus_inactive",
- action = function(w, t) t.client.sticky = true end },
- { idx = "n/a", img = "normal_active",
- action = function(w, t) t.client.sticky = false end },
- { idx = "f/a", img = "focus_active",
- action = function(w, t) t.client.sticky = false end })
-
-local maximized_buttons = button_group("maximized",
- { align = "right" },
- select_state_maximized,
- { idx = "n/i", img = "normal_inactive",
- action = function(w, t) t.client.maximized_horizontal = true
- t.client.maximized_vertical = true end },
- { idx = "f/i", img = "focus_inactive",
- action = function(w, t) t.client.maximized_horizontal = true
- t.client.maximized_vertical = true end },
- { idx = "n/a", img = "normal_active",
- action = function(w, t) t.client.maximized_horizontal = false
- t.client.maximized_vertical = false end },
- { idx = "f/a", img = "focus_active",
- action = function(w, t) t.client.maximized_horizontal = false
- t.client.maximized_vertical = false end })
-
-local close_buttons = button_group("close",
- { align = "left" },
- select_state_focus,
- { idx = "n", img = "normal",
- action = function (w, t) t.client:kill() end },
- { idx = "f", img = "focus",
- action = function (w, t) t.client:kill() end })
-
-local function floating_update(w, t)
- client.floating.toggle(t.client)
-end
-
-local floating_buttons = button_group("floating",
- { align = "right"},
- select_state_floating,
- { idx = "n/i", img = "normal_inactive", action = floating_update },
- { idx = "f/i", img = "focus_inactive", action = floating_update },
- { idx = "n/a", img = "normal_active", action = floating_update },
- { idx = "f/a", img = "focus_active", action = floating_update })
-
-button_groups = { close_buttons,
- ontop_buttons,
- sticky_buttons,
- maximized_buttons,
- floating_buttons }
-
--- Register standards hooks
-capi.client.add_signal("focus", update)
-capi.client.add_signal("unfocus", update)
-
--- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
diff --git a/luaa.c b/luaa.c
index ea80e837c..0ee2d568b 100644
--- a/luaa.c
+++ b/luaa.c
@@ -603,9 +603,6 @@ luaA_awesome_newindex(lua_State *L)
/* refresh all wiboxes */
foreach(wibox, globalconf.wiboxes)
(*wibox)->need_update = true;
- foreach(c, globalconf.clients)
- if((*c)->titlebar)
- (*c)->titlebar->need_update = true;
}
break;
case A_TK_FG:
diff --git a/luadoc/client.lua b/luadoc/client.lua
index 6cabe2430..3235c9a3c 100644
--- a/luadoc/client.lua
+++ b/luadoc/client.lua
@@ -23,7 +23,6 @@ module("client")
-- @field size_hints_honor Honor size hints, i.e. respect size ratio.
-- @field border_width The client border width.
-- @field border_color The client border color.
--- @field titlebar The client titlebar.
-- @field urgent The client urgent state.
-- @field content An image representing the client window content (screenshot).
-- @field focus The focused client.
diff --git a/luadoc/wibox.lua b/luadoc/wibox.lua
index 5b88a211a..9b919cfd0 100644
--- a/luadoc/wibox.lua
+++ b/luadoc/wibox.lua
@@ -5,14 +5,11 @@ module("wibox")
--- Wibox object.
-- @field screen Screen number.
--- @field client The client attached to (titlebar only).
-- @field border_width Border width.
-- @field border_color Border color.
--- @field align The alignment (titlebar only).
-- @field fg Foreground color.
-- @field bg Background color.
-- @field bg_image Background image.
--- @field position The position (titlebar only).
-- @field ontop On top of other windows.
-- @field cursor The mouse cursor.
-- @field visible Visibility.
diff --git a/objects/client.c b/objects/client.c
index 9ff46eada..469910245 100644
--- a/objects/client.c
+++ b/objects/client.c
@@ -25,11 +25,12 @@
#include "objects/tag.h"
#include "ewmh.h"
#include "screen.h"
-#include "titlebar.h"
+#include "wibox.h"
#include "systray.h"
#include "property.h"
#include "spawn.h"
#include "luaa.h"
+#include "window.h"
#include "common/atoms.h"
#include "common/xutil.h"
@@ -452,18 +453,7 @@ client_stack_above(client_t *c, xcb_window_t previous)
XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE,
config_win_vals);
- config_win_vals[0] = c->window;
-
- if(c->titlebar)
- {
- xcb_configure_window(globalconf.connection,
- c->titlebar->window,
- XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE,
- config_win_vals);
- previous = c->titlebar->window;
- }
- else
- previous = c->window;
+ previous = config_win_vals[0] = c->window;
/* stack transient window on top of their parents */
foreach(node, globalconf.stack)
@@ -811,7 +801,7 @@ client_geometry_hints(client_t *c, area_t geometry)
}
/** Resize client window.
- * The sizes given as parameters are with titlebar and borders!
+ * The sizes given as parameters are with borders!
* \param c Client to resize.
* \param geometry New window geometry.
* \param hints Use size hints.
@@ -820,7 +810,6 @@ client_geometry_hints(client_t *c, area_t geometry)
bool
client_resize(client_t *c, area_t geometry, bool hints)
{
- area_t geometry_internal;
area_t area;
/* offscreen appearance fixes */
@@ -835,8 +824,10 @@ client_resize(client_t *c, area_t geometry, bool hints)
if(geometry.y + geometry.height < 0)
geometry.y = 0;
- /* Real client geometry, please keep it contained to C code at the very least. */
- geometry_internal = titlebar_geometry_remove(c->titlebar, c->border_width, geometry);
+ area_t geometry_internal = { .x = geometry.x,
+ .y = geometry.y,
+ .width = geometry.width - 2 * c->border_width,
+ .height = geometry.height - 2 * c->border_width };
if(hints)
geometry_internal = client_geometry_hints(c, geometry_internal);
@@ -845,7 +836,10 @@ client_resize(client_t *c, area_t geometry, bool hints)
return false;
/* Also let client hints propagate to the "official" geometry. */
- geometry = titlebar_geometry_add(c->titlebar, c->border_width, geometry_internal);
+ geometry.x = geometry_internal.x;
+ geometry.y = geometry_internal.y;
+ geometry.width = geometry_internal.width + 2 * c->border_width;
+ geometry.height = geometry_internal.height + 2 * c->border_width;
if(c->geometries.internal.x != geometry_internal.x
|| c->geometries.internal.y != geometry_internal.y
@@ -864,11 +858,9 @@ client_resize(client_t *c, area_t geometry, bool hints)
c->geometries.internal.width = values[2] = geometry_internal.width;
c->geometries.internal.height = values[3] = geometry_internal.height;
- /* Also store geometry including border and titlebar. */
+ /* Also store geometry including border */
c->geometry = geometry;
- titlebar_update_geometry(c);
-
/* Ignore all spurious enter/leave notify events */
client_ignore_enterleave_events();
@@ -957,8 +949,6 @@ client_set_fullscreen(lua_State *L, int cidx, bool s)
/* become fullscreen! */
if(s)
{
- /* Make sure the current geometry is stored without titlebar. */
- titlebar_ban(c->titlebar);
/* remove any max state */
client_set_maximized_horizontal(L, cidx, false);
client_set_maximized_vertical(L, cidx, false);
@@ -1235,8 +1225,6 @@ client_unmanage(client_t *c)
window_state_set(c->window, XCB_WM_STATE_WITHDRAWN);
- titlebar_client_detach(c);
-
ewmh_update_net_client_list(c->phys_screen);
/* set client as invalid */
@@ -1359,9 +1347,6 @@ client_set_border_width(lua_State *L, int cidx, int width)
c->geometry.width += 2 * c->border_width;
c->geometry.height += 2 * c->border_width;
- /* Changing border size also affects the size of the titlebar. */
- titlebar_update_geometry(c);
-
luaA_object_emit_signal(L, cidx, "property::border_width", 0);
}
@@ -1743,16 +1728,6 @@ luaA_client_set_border_color(lua_State *L, client_t *c)
return 0;
}
-static int
-luaA_client_set_titlebar(lua_State *L, client_t *c)
-{
- if(lua_isnil(L, -1))
- titlebar_client_detach(c);
- else
- titlebar_client_attach(c);
- return 0;
-}
-
static int
luaA_client_set_skip_taskbar(lua_State *L, client_t *c)
{
@@ -1898,12 +1873,6 @@ luaA_client_get_icon(lua_State *L, client_t *c)
return luaA_object_push_item(L, -2, c->icon);
}
-static int
-luaA_client_get_titlebar(lua_State *L, client_t *c)
-{
- return luaA_object_push(L, c->titlebar);
-}
-
static int
luaA_client_get_size_hints(lua_State *L, client_t *c)
{
@@ -2275,10 +2244,6 @@ client_class_setup(lua_State *L)
(lua_class_propfunc_t) luaA_client_set_border_color,
(lua_class_propfunc_t) luaA_client_get_border_color,
(lua_class_propfunc_t) luaA_client_set_border_color);
- luaA_class_add_property(&client_class, A_TK_TITLEBAR,
- (lua_class_propfunc_t) luaA_client_set_titlebar,
- (lua_class_propfunc_t) luaA_client_get_titlebar,
- (lua_class_propfunc_t) luaA_client_set_titlebar);
luaA_class_add_property(&client_class, A_TK_URGENT,
(lua_class_propfunc_t) luaA_client_set_urgent,
(lua_class_propfunc_t) luaA_client_get_urgent,
diff --git a/objects/client.h b/objects/client.h
index 61e25a4fa..03fdce66f 100644
--- a/objects/client.h
+++ b/objects/client.h
@@ -128,8 +128,6 @@ struct client_t
screen_t *screen;
/** Client physical screen */
int phys_screen;
- /** Titlebar */
- wibox_t *titlebar;
/** Button bindings */
button_array_t buttons;
/** Key bindings */
diff --git a/objects/wibox.c b/objects/wibox.c
index 21ba0731f..2bffd9b79 100644
--- a/objects/wibox.c
+++ b/objects/wibox.c
@@ -23,7 +23,6 @@
#include "screen.h"
#include "wibox.h"
-#include "titlebar.h"
#include "objects/client.h"
#include "screen.h"
#include "window.h"
@@ -34,6 +33,34 @@
LUA_OBJECT_FUNCS(wibox_class, wibox_t, wibox)
+/** Destroy all X resources of a wibox.
+ * \param w The wibox to wipe.
+ */
+static void
+wibox_wipe(wibox_t *w)
+{
+ if(w->window)
+ {
+ /* Activate BMA */
+ client_ignore_enterleave_events();
+ xcb_destroy_window(globalconf.connection, w->window);
+ /* Deactivate BMA */
+ client_restore_enterleave_events();
+ w->window = XCB_NONE;
+ }
+ if(w->pixmap)
+ {
+ xcb_free_pixmap(globalconf.connection, w->pixmap);
+ w->pixmap = XCB_NONE;
+ }
+ if(w->gc)
+ {
+ xcb_free_gc(globalconf.connection, w->gc);
+ w->gc = XCB_NONE;
+ }
+ draw_context_wipe(&w->ctx);
+}
+
/** Take care of garbage collecting a wibox.
* \param L The Lua VM state.
* \return The number of elements pushed on stack, 0!
@@ -156,7 +183,7 @@ wibox_draw_context_update(wibox_t *w, xcb_screen_t *s)
* \param w The wibox to initialize.
* \param phys_screen Physical screen number.
*/
-void
+static void
wibox_init(wibox_t *w, int phys_screen)
{
xcb_screen_t *s = xutil_screen_get(globalconf.connection, phys_screen);
@@ -212,7 +239,7 @@ wibox_refresh_pixmap(wibox_t *w)
* \param udx The index of the wibox.
* \param geometry The new geometry.
*/
-void
+static void
wibox_moveresize(lua_State *L, int udx, area_t geometry)
{
wibox_t *w = luaA_checkudata(L, udx, &wibox_class);
@@ -346,7 +373,7 @@ wibox_set_border_color(lua_State *L, int udx, const xcolor_t *color)
* \param udx The wibox to change orientation.
* \param o The new orientation.
*/
-void
+static void
wibox_set_orientation(lua_State *L, int udx, orientation_t o)
{
wibox_t *w = luaA_checkudata(L, udx, &wibox_class);
@@ -568,14 +595,6 @@ wibox_getbywin(xcb_window_t win)
foreach(w, globalconf.wiboxes)
if((*w)->window == win)
return *w;
-
- foreach(_c, globalconf.clients)
- {
- client_t *c = *_c;
- if(c->titlebar && c->titlebar->window == win)
- return c->titlebar;
- }
-
return NULL;
}
@@ -608,13 +627,6 @@ wibox_refresh(void)
if((*w)->need_update)
wibox_draw(*w);
}
-
- foreach(_c, globalconf.clients)
- {
- client_t *c = *_c;
- if(c->titlebar && c->titlebar->need_update)
- wibox_draw(c->titlebar);
- }
}
/** Set a wibox visible or not.
@@ -653,34 +665,6 @@ wibox_set_visible(lua_State *L, int udx, bool v)
}
}
-/** Destroy all X resources of a wibox.
- * \param w The wibox to wipe.
- */
-void
-wibox_wipe(wibox_t *w)
-{
- if(w->window)
- {
- /* Activate BMA */
- client_ignore_enterleave_events();
- xcb_destroy_window(globalconf.connection, w->window);
- /* Deactivate BMA */
- client_restore_enterleave_events();
- w->window = XCB_NONE;
- }
- if(w->pixmap)
- {
- xcb_free_pixmap(globalconf.connection, w->pixmap);
- w->pixmap = XCB_NONE;
- }
- if(w->gc)
- {
- xcb_free_gc(globalconf.connection, w->gc);
- w->gc = XCB_NONE;
- }
- draw_context_wipe(&w->ctx);
-}
-
/** Remove a wibox from a screen.
* \param L The Lua VM state.
* \param udx Wibox to detach from screen.
@@ -853,17 +837,6 @@ luaA_wibox_invalidate_byitem(lua_State *L, const void *item)
}
}
-
- foreach(_c, globalconf.clients)
- {
- client_t *c = *_c;
- if(c->titlebar && luaA_wibox_hasitem(L, c->titlebar, item))
- {
- /* update wibox */
- wibox_need_update(c->titlebar);
- lua_pop(L, 1); /* remove widgets table */
- }
- }
}
/* Set or get the wibox geometry.
@@ -889,18 +862,7 @@ luaA_wibox_geometry(lua_State *L)
wingeom.height = luaA_getopt_number(L, 2, "height", wibox->geometry.height);
if(wingeom.width > 0 && wingeom.height > 0)
- switch(wibox->type)
- {
- case WIBOX_TYPE_TITLEBAR:
- wibox_moveresize(L, 1, (area_t) { .x = wibox->geometry.x,
- .y = wibox->geometry.y,
- .width = wingeom.width,
- .height = wingeom.height });
- break;
- case WIBOX_TYPE_NORMAL:
- wibox_moveresize(L, 1, wingeom);
- break;
- }
+ wibox_moveresize(L, 1, wingeom);
}
return luaA_pusharea(L, wibox->geometry);
@@ -1138,102 +1100,6 @@ luaA_wibox_get_opacity(lua_State *L, wibox_t *wibox)
return 0;
}
-/** Set the wibox alignment.
- * \param L The Lua VM state.
- * \param wibox The wibox object.
- * \return The number of elements pushed on stack.
- */
-static int
-luaA_wibox_set_align(lua_State *L, wibox_t *wibox)
-{
- size_t len;
- const char *buf = luaL_checklstring(L, -1, &len);
- wibox->align = draw_align_fromstr(buf, len);
- luaA_object_emit_signal(L, -3, "property::align", 0);
- switch(wibox->type)
- {
- case WIBOX_TYPE_NORMAL:
- break;
- case WIBOX_TYPE_TITLEBAR:
- titlebar_update_geometry(client_getbytitlebar(wibox));
- break;
- }
- return 0;
-}
-
-/** Get the wibox alignment.
- * \param L The Lua VM state.
- * \param wibox The wibox object.
- * \return The number of elements pushed on stack.
- */
-static int
-luaA_wibox_get_align(lua_State *L, wibox_t *wibox)
-{
- lua_pushstring(L, draw_align_tostr(wibox->align));
- return 1;
-}
-
-/** Set the wibox position.
- * \param L The Lua VM state.
- * \param wibox The wibox object.
- * \return The number of elements pushed on stack.
- */
-static int
-luaA_wibox_set_position(lua_State *L, wibox_t *wibox)
-{
- switch(wibox->type)
- {
- case WIBOX_TYPE_NORMAL:
- break;
- case WIBOX_TYPE_TITLEBAR:
- return luaA_titlebar_set_position(L, -3);
- }
- return 0;
-}
-
-/** Get the wibox position.
- * \param L The Lua VM state.
- * \param wibox The wibox object.
- * \return The number of elements pushed on stack.
- */
-static int
-luaA_wibox_get_position(lua_State *L, wibox_t *wibox)
-{
- lua_pushstring(L, position_tostr(wibox->position));
- return 1;
-}
-
-/** Set the wibox (titlebar) client.
- * \param L The Lua VM state.
- * \param wibox The wibox object.
- * \return The number of elements pushed on stack.
- */
-static int
-luaA_wibox_set_client(lua_State *L, wibox_t *wibox)
-{
- /* first detach */
- if(lua_isnil(L, -1))
- titlebar_client_detach(client_getbytitlebar(wibox));
- else
- {
- client_t *c = luaA_client_checkudata(L, -1);
- lua_pushvalue(L, -3);
- titlebar_client_attach(c);
- }
- return 0;
-}
-
-/** Get the wibox (titlebar) client.
- * \param L The Lua VM state.
- * \param wibox The wibox object.
- * \return The number of elements pushed on stack.
- */
-static int
-luaA_wibox_get_client(lua_State *L, wibox_t *wibox)
-{
- return luaA_object_push(L, client_getbytitlebar(wibox));
-}
-
/** Set the wibox cursor.
* \param L The Lua VM state.
* \param wibox The wibox object.
@@ -1267,19 +1133,13 @@ static int
luaA_wibox_set_screen(lua_State *L, wibox_t *wibox)
{
if(lua_isnil(L, -1))
- {
wibox_detach(L, -3);
- titlebar_client_detach(client_getbytitlebar(wibox));
- }
else
{
int screen = luaL_checknumber(L, -1) - 1;
luaA_checkscreen(screen);
if(!wibox->screen || screen != screen_array_indexof(&globalconf.screens, wibox->screen))
- {
- titlebar_client_detach(client_getbytitlebar(wibox));
wibox_attach(L, -3, &globalconf.screens.tab[screen]);
- }
}
return 0;
}
@@ -1353,17 +1213,7 @@ luaA_wibox_set_border_color(lua_State *L, wibox_t *wibox)
static int
luaA_wibox_set_visible(lua_State *L, wibox_t *wibox)
{
- bool b = luaA_checkboolean(L, -1);
- if(b != wibox->visible)
- switch(wibox->type)
- {
- case WIBOX_TYPE_NORMAL:
- wibox_set_visible(L, -3, b);
- break;
- case WIBOX_TYPE_TITLEBAR:
- titlebar_set_visible(wibox, b);
- break;
- }
+ wibox_set_visible(L, -3, luaA_checkboolean(L, -1));
return 0;
}
@@ -1537,18 +1387,6 @@ wibox_class_setup(lua_State *L)
(lua_class_propfunc_t) luaA_wibox_set_cursor,
(lua_class_propfunc_t) luaA_wibox_get_cursor,
(lua_class_propfunc_t) luaA_wibox_set_cursor);
- luaA_class_add_property(&wibox_class, A_TK_CLIENT,
- (lua_class_propfunc_t) luaA_wibox_set_client,
- (lua_class_propfunc_t) luaA_wibox_get_client,
- (lua_class_propfunc_t) luaA_wibox_set_client);
- luaA_class_add_property(&wibox_class, A_TK_POSITION,
- (lua_class_propfunc_t) luaA_wibox_set_position,
- (lua_class_propfunc_t) luaA_wibox_get_position,
- (lua_class_propfunc_t) luaA_wibox_set_position);
- luaA_class_add_property(&wibox_class, A_TK_ALIGN,
- (lua_class_propfunc_t) luaA_wibox_set_align,
- (lua_class_propfunc_t) luaA_wibox_get_align,
- (lua_class_propfunc_t) luaA_wibox_set_align);
luaA_class_add_property(&wibox_class, A_TK_FG,
(lua_class_propfunc_t) luaA_wibox_set_fg,
(lua_class_propfunc_t) luaA_wibox_get_fg,
diff --git a/objects/wibox.h b/objects/wibox.h
index 8bbeed1b7..37a80b38a 100644
--- a/objects/wibox.h
+++ b/objects/wibox.h
@@ -26,13 +26,6 @@
#include "strut.h"
#include "common/luaobject.h"
-/** Wibox types */
-typedef enum
-{
- WIBOX_TYPE_NORMAL = 0,
- WIBOX_TYPE_TITLEBAR
-} wibox_type_t;
-
/** Wibox type */
struct wibox_t
{
@@ -41,12 +34,6 @@ struct wibox_t
bool ontop;
/** Visible */
bool visible;
- /** Position */
- position_t position;
- /** Wibox type */
- wibox_type_t type;
- /** Alignment */
- alignment_t align;
/** Screen */
screen_t *screen;
/** Widget list */
@@ -62,8 +49,6 @@ struct wibox_t
char *cursor;
/** Background image */
image_t *bg_image;
- /* Banned? used for titlebars */
- bool isbanned;
/** Button bindings */
button_array_t buttons;
/** The window object. */
@@ -106,12 +91,9 @@ void luaA_wibox_invalidate_byitem(lua_State *, const void *);
wibox_t * wibox_getbywin(xcb_window_t);
-void wibox_moveresize(lua_State *, int, area_t);
-void wibox_refresh_pixmap_partial(wibox_t *, int16_t, int16_t, uint16_t, uint16_t);
-void wibox_init(wibox_t *, int);
-void wibox_wipe(wibox_t *);
void wibox_set_opacity(lua_State *, int, double);
-void wibox_set_orientation(lua_State *, int, orientation_t);
+
+void wibox_refresh_pixmap_partial(wibox_t *, int16_t, int16_t, uint16_t, uint16_t);
void wibox_class_setup(lua_State *);
diff --git a/objects/widget.c b/objects/widget.c
index b7e3e66e7..ecd67d7c6 100644
--- a/objects/widget.c
+++ b/objects/widget.c
@@ -370,7 +370,7 @@ widget_invalidate_bytype(widget_constructor_t *type)
}
}
-/** Set a wibox needs update because it has widget, or redraw a titlebar.
+/** Set a wibox needs update because it has widget.
* \param widget The widget to look for.
*/
void
@@ -384,18 +384,6 @@ widget_invalidate_bywidget(widget_t *widget)
(*wibox)->need_update = true;
break;
}
-
- foreach(_c, globalconf.clients)
- {
- client_t *c = *_c;
- if(c->titlebar && !c->titlebar->need_update)
- for(int j = 0; j < c->titlebar->widgets.len; j++)
- if(c->titlebar->widgets.tab[j].widget == widget)
- {
- c->titlebar->need_update = true;
- break;
- }
- }
}
/** Create a new widget.
diff --git a/objects/widgets/imagebox.c b/objects/widgets/imagebox.c
index d92adcd78..b01ef8cfa 100644
--- a/objects/widgets/imagebox.c
+++ b/objects/widgets/imagebox.c
@@ -21,7 +21,6 @@
#include "objects/widget.h"
#include "luaa.h"
-#include "titlebar.h"
/** The imagebox private data structure */
typedef struct
diff --git a/objects/widgets/systray.c b/objects/widgets/systray.c
index 9346da841..ecfef64ea 100644
--- a/objects/widgets/systray.c
+++ b/objects/widgets/systray.c
@@ -62,18 +62,7 @@ static void
systray_draw(widget_t *widget, draw_context_t *ctx,
area_t geometry, wibox_t *p)
{
- uint32_t orient;
-
- switch(p->position)
- {
- case Right:
- case Left:
- orient = _NET_SYSTEM_TRAY_ORIENTATION_VERT;
- break;
- default:
- orient = _NET_SYSTEM_TRAY_ORIENTATION_HORZ;
- break;
- }
+ uint32_t orient = _NET_SYSTEM_TRAY_ORIENTATION_HORZ;
systray_data_t *d = widget->data;
d->height = p->geometry.height;
diff --git a/screen.c b/screen.c
index 5cd0faebb..e8a0b5647 100644
--- a/screen.c
+++ b/screen.c
@@ -270,9 +270,6 @@ screen_client_moveto(client_t *c, screen_t *new_screen, bool doresize)
c->screen = new_screen;
- if(c->titlebar)
- c->titlebar->screen = new_screen;
-
/* If client was on a screen, remove old tags */
if(old_screen)
foreach(old_tag, old_screen->tags)
diff --git a/titlebar.c b/titlebar.c
deleted file mode 100644
index cee997136..000000000
--- a/titlebar.c
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * titlebar.c - titlebar management
- *
- * Copyright © 2008-2009 Julien Danjou
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include
-
-#include "titlebar.h"
-#include "objects/client.h"
-#include "objects/widget.h"
-#include "objects/wibox.h"
-#include "screen.h"
-#include "luaa.h"
-
-/** Get a client by its titlebar.
- * \param titlebar The titlebar.
- * \return A client.
- */
-client_t *
-client_getbytitlebar(wibox_t *titlebar)
-{
- foreach(c, globalconf.clients)
- if((*c)->titlebar == titlebar)
- return *c;
-
- return NULL;
-}
-
-/** Get a client by its titlebar window.
- * \param win The window.
- * \return A client.
- */
-client_t *
-client_getbytitlebarwin(xcb_window_t win)
-{
- foreach(c, globalconf.clients)
- if((*c)->titlebar && (*c)->titlebar->window == win)
- return *c;
-
- return NULL;
-}
-
-/** Move a titlebar out of the viewport.
- * \param titlebar The titlebar.
- */
-void
-titlebar_ban(wibox_t *titlebar)
-{
- /* Do it manually because client geometry remains unchanged. */
- if(titlebar && !titlebar->isbanned)
- {
- client_t *c;
-
- if(titlebar->window)
- xcb_unmap_window(globalconf.connection, titlebar->window);
-
- /* Remove titlebar geometry from client. */
- if((c = client_getbytitlebar(titlebar)))
- c->geometry = titlebar_geometry_remove(titlebar, 0, c->geometry);
-
- titlebar->isbanned = true;
- }
-}
-
-/** Move a titlebar on top of its client.
- * \param titlebar The titlebar.
- */
-void
-titlebar_unban(wibox_t *titlebar)
-{
- /* Do this manually because the system doesn't know we moved the toolbar.
- * Note that !visible titlebars are unmapped and for fullscreen it'll
- * end up offscreen anyway. */
- if(titlebar && titlebar->isbanned)
- {
- client_t *c;
-
- if(titlebar->window)
- xcb_map_window(globalconf.connection, titlebar->window);
-
- titlebar->isbanned = false;
-
- /* Add titlebar geometry from client. */
- if((c = client_getbytitlebar(titlebar)))
- c->geometry = titlebar_geometry_add(titlebar, 0, c->geometry);
- }
-}
-
-/** Get titlebar area.
- * \param c The client
- * \param geometry The client geometry including borders, excluding titlebars.
- * \param res Pointer to area of titlebar, must be allocated already.
- */
-void
-titlebar_geometry_compute(client_t *c, area_t geometry, area_t *res)
-{
- int height, width, x_offset = 0, y_offset = 0;
-
- switch(c->titlebar->position)
- {
- default:
- return;
- case Top:
- width = MAX(1, geometry.width);
- switch(c->titlebar->align)
- {
- default:
- break;
- case AlignRight:
- x_offset = geometry.width - width;
- break;
- case AlignCenter:
- x_offset = (geometry.width - width) / 2;
- break;
- }
- res->x = geometry.x + x_offset;
- res->y = geometry.y - c->titlebar->geometry.height;
- res->width = width;
- res->height = c->titlebar->geometry.height;
- break;
- case Bottom:
- width = MAX(1, geometry.width);
- switch(c->titlebar->align)
- {
- default:
- break;
- case AlignRight:
- x_offset = geometry.width - width;
- break;
- case AlignCenter:
- x_offset = (geometry.width - width) / 2;
- break;
- }
- res->x = geometry.x + x_offset;
- res->y = geometry.y + geometry.height;
- res->width = width;
- res->height = c->titlebar->geometry.height;
- break;
- case Left:
- height = MAX(1, geometry.height);
- switch(c->titlebar->align)
- {
- default:
- break;
- case AlignRight:
- y_offset = geometry.height - height;
- break;
- case AlignCenter:
- y_offset = (geometry.height - height) / 2;
- break;
- }
- res->x = geometry.x - c->titlebar->geometry.width;
- res->y = geometry.y + y_offset;
- res->width = c->titlebar->geometry.width;
- res->height = height;
- break;
- case Right:
- height = MAX(1, geometry.height);
- switch(c->titlebar->align)
- {
- default:
- break;
- case AlignRight:
- y_offset = geometry.height - height;
- break;
- case AlignCenter:
- y_offset = (geometry.height - height) / 2;
- break;
- }
- res->x = geometry.x + geometry.width;
- res->y = geometry.y + y_offset;
- res->width = c->titlebar->geometry.width;
- res->height = height;
- break;
- }
-}
-
-/** Detach a wibox titlebar from its client.
- * \param c The client.
- */
-void
-titlebar_client_detach(client_t *c)
-{
- /* If client has a titlebar, kick it out. */
- if(c && c->titlebar)
- {
- /* Update client geometry to exclude the titlebar. */
- c->geometry = titlebar_geometry_remove(c->titlebar, 0, c->geometry);
- wibox_wipe(c->titlebar);
- c->titlebar->type = WIBOX_TYPE_NORMAL;
- c->titlebar->screen = NULL;
-
- luaA_object_unref(globalconf.L, c->titlebar);
- c->titlebar = NULL;
-
- luaA_object_push(globalconf.L, c);
- luaA_object_emit_signal(globalconf.L, -1, "property::titlebar", 0);
- lua_pop(globalconf.L, 1);
- client_stack();
- }
-}
-
-/** Attach a wibox to a client as its titlebar.
- * \param c The client.
- */
-void
-titlebar_client_attach(client_t *c)
-{
- /* check if we can register the object */
- wibox_t *t = luaA_object_ref_class(globalconf.L, -1, &wibox_class);
-
- titlebar_client_detach(c);
-
- /* check if titlebar is already on a client */
- titlebar_client_detach(client_getbytitlebar(t));
-
- /* check if client already has a titlebar. */
- titlebar_client_detach(c);
-
- /* set the object as new client's titlebar */
- c->titlebar = t;
-
- t->type = WIBOX_TYPE_TITLEBAR;
- t->screen = c->screen;
-
- switch(t->position)
- {
- case Top:
- case Bottom:
- if(!t->geometry.height)
- t->geometry.height = 1.5 * globalconf.font->height;
- break;
- case Left:
- case Right:
- if(!t->geometry.width)
- t->geometry.width = 1.5 * globalconf.font->height;
- break;
- }
-
- /* Update client geometry to include the titlebar. */
- c->geometry = titlebar_geometry_add(c->titlebar, 0, c->geometry);
-
- /* Client geometry without titlebar, but including borders, since that is always consistent. */
- titlebar_geometry_compute(c, titlebar_geometry_remove(c->titlebar, 0, c->geometry), &t->geometry);
-
- wibox_init(t, c->phys_screen);
-
- t->need_update = true;
-
- /* Call update geometry. This will move the wibox to the right place,
- * which might be the same as `wingeom', but then it will ban the
- * titlebar if needed. */
- titlebar_update_geometry(c);
-
- xcb_map_window(globalconf.connection, t->window);
-
- luaA_object_push(globalconf.L, c);
- luaA_object_emit_signal(globalconf.L, -1, "property::titlebar", 0);
- lua_pop(globalconf.L, 1);
- client_stack();
-}
-
-/** Map or unmap a titlebar wibox.
- * \param t The wibox/titlebar.
- * \param visible The new state of the titlebar.
- */
-void
-titlebar_set_visible(wibox_t *t, bool visible)
-{
- if(visible != t->visible)
- {
- if((t->visible = visible))
- titlebar_unban(t);
- else
- titlebar_ban(t);
-
- client_stack();
- }
-}
-
-int
-luaA_titlebar_set_position(lua_State *L, int udx)
-{
- wibox_t *titlebar = luaA_checkudata(L, udx, &wibox_class);
- size_t len;
- const char *buf = luaL_checklstring(L, -1, &len);
- position_t position = position_fromstr(buf, len);
- if(position != titlebar->position)
- {
- switch(position)
- {
- case Left:
- switch(titlebar->position)
- {
- int tmp;
- case Left:
- case Right:
- break;
- case Top:
- case Bottom:
- tmp = titlebar->geometry.width;
- titlebar->geometry.width = titlebar->geometry.height;
- titlebar->geometry.height = tmp;
- break;
- }
- wibox_set_orientation(L, udx, North);
- break;
- case Right:
- switch(titlebar->position)
- {
- int tmp;
- case Left:
- case Right:
- break;
- case Top:
- case Bottom:
- tmp = titlebar->geometry.width;
- titlebar->geometry.width = titlebar->geometry.height;
- titlebar->geometry.height = tmp;
- break;
- }
- wibox_set_orientation(L, udx, South);
- break;
- case Top:
- case Bottom:
- switch(titlebar->position)
- {
- int tmp;
- case Left:
- case Right:
- tmp = titlebar->geometry.width;
- titlebar->geometry.width = titlebar->geometry.height;
- titlebar->geometry.height = tmp;
- break;
- case Top:
- case Bottom:
- break;
- }
- wibox_set_orientation(L, udx, East);
- break;
- }
- titlebar->position = position;
- client_t *c;
- if((c = client_getbytitlebar(titlebar)))
- titlebar_update_geometry(c);
- }
- return 0;
-}
-
-// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
diff --git a/titlebar.h b/titlebar.h
deleted file mode 100644
index 2c5c843a9..000000000
--- a/titlebar.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * titlebar.h - titlebar management header
- *
- * Copyright © 2008-2009 Julien Danjou
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#ifndef AWESOME_TITLEBAR_H
-#define AWESOME_TITLEBAR_H
-
-#include "objects/wibox.h"
-#include "objects/client.h"
-#include "window.h"
-
-client_t * client_getbytitlebar(wibox_t *);
-client_t * client_getbytitlebarwin(xcb_window_t);
-void titlebar_geometry_compute(client_t *, area_t, area_t *);
-void titlebar_init(client_t *);
-void titlebar_client_detach(client_t *);
-void titlebar_client_attach(client_t *);
-void titlebar_set_visible(wibox_t *, bool);
-void titlebar_ban(wibox_t *);
-void titlebar_unban(wibox_t *);
-
-int luaA_titlebar_set_position(lua_State *, int);
-
-static inline bool
-titlebar_isvisible(client_t *c, screen_t *screen)
-{
- if(client_isvisible(c, screen))
- {
- if(c->fullscreen)
- return false;
- if(!c->titlebar || !c->titlebar->visible)
- return false;
- return true;
- }
- return false;
-}
-
-/** Add the titlebar geometry and border to a geometry.
- * \param t The titlebar
- * \param border The client border size.
- * \param geometry The geometry
- * \return A new geometry bigger if the titlebar is visible.
- */
-static inline area_t
-titlebar_geometry_add(wibox_t *t, int border, area_t geometry)
-{
- /* We need to add titlebar border to the total width and height.
- * This can then be subtracted/added to the width/height/x/y.
- * In this case the border is included, because it belongs to a different window.
- */
- if(t && t->visible)
- switch(t->position)
- {
- case Top:
- geometry.y -= t->geometry.height;
- geometry.height += t->geometry.height;
- break;
- case Bottom:
- geometry.height += t->geometry.height;
- break;
- case Left:
- geometry.x -= t->geometry.width;
- geometry.width += t->geometry.width;
- break;
- case Right:
- geometry.width += t->geometry.width;
- break;
- default:
- break;
- }
-
- /* Adding a border to a client only changes width and height, x and y are including border. */
- geometry.width += 2 * border;
- geometry.height += 2 * border;
-
- return geometry;
-}
-
-/** Remove the titlebar geometry and border width to a geometry.
- * \param t The titlebar.
- * \param border The client border size.
- * \param geometry The geometry.
- * \return A new geometry smaller if the titlebar is visible.
- */
-static inline area_t
-titlebar_geometry_remove(wibox_t *t, int border, area_t geometry)
-{
- /* We need to add titlebar border to the total width and height.
- * This can then be subtracted/added to the width/height/x/y.
- * In this case the border is included, because it belongs to a different window.
- */
- if(t && t->visible)
- switch(t->position)
- {
- case Top:
- geometry.y += t->geometry.height;
- unsigned_subtract(geometry.height, t->geometry.height);
- break;
- case Bottom:
- unsigned_subtract(geometry.height, t->geometry.height);
- break;
- case Left:
- geometry.x += t->geometry.width;
- unsigned_subtract(geometry.width, t->geometry.width);
- break;
- case Right:
- unsigned_subtract(geometry.width, t->geometry.width);
- break;
- default:
- break;
- }
-
- /* Adding a border to a client only changes width and height, x and y are including border. */
- unsigned_subtract(geometry.width, 2*border);
- unsigned_subtract(geometry.height, 2*border);
-
- return geometry;
-}
-
-/** Update the titlebar geometry for a client.
- * \param c The client.
- */
-static inline void
-titlebar_update_geometry(client_t *c)
-{
- area_t geom;
-
- if(!c->titlebar)
- return;
-
- /* Client geometry without titlebar, but including borders, since that is always consistent. */
- titlebar_geometry_compute(c, titlebar_geometry_remove(c->titlebar, 0, c->geometry), &geom);
- luaA_object_push(globalconf.L, c->titlebar);
- wibox_moveresize(globalconf.L, -1, geom);
- lua_pop(globalconf.L, 1);
-}
-
-#endif
-// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80