summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/x11/detect.py5
-rw-r--r--platform/x11/joystick_linux.cpp4
-rw-r--r--platform/x11/key_mapping_x11.cpp1
-rw-r--r--platform/x11/os_x11.cpp183
-rw-r--r--scene/gui/item_list.cpp31
-rw-r--r--tools/editor/editor_profiler.cpp2
6 files changed, 60 insertions, 166 deletions
diff --git a/platform/x11/detect.py b/platform/x11/detect.py
index 2be8b01dc3..356de7b2bc 100644
--- a/platform/x11/detect.py
+++ b/platform/x11/detect.py
@@ -62,7 +62,6 @@ def get_opts():
('use_leak_sanitizer','Use llvm compiler sanitize memory leaks','no'),
('pulseaudio','Detect & Use pulseaudio','yes'),
('udev','Use udev for gamepad connection callbacks','no'),
- ('new_wm_api', 'Use experimental window management API','no'),
('debug_release', 'Add debug symbols to release version','no'),
]
@@ -204,10 +203,6 @@ def configure(env):
env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } )
#env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } )
- if(env["new_wm_api"]=="yes"):
- env.Append(CPPFLAGS=['-DNEW_WM_API'])
- env.ParseConfig('pkg-config xinerama --cflags --libs')
-
if (env["use_static_cpp"]=="yes"):
env.Append(LINKFLAGS=['-static-libstdc++'])
diff --git a/platform/x11/joystick_linux.cpp b/platform/x11/joystick_linux.cpp
index 4a6a4f3a52..3b854a8d46 100644
--- a/platform/x11/joystick_linux.cpp
+++ b/platform/x11/joystick_linux.cpp
@@ -259,7 +259,7 @@ void joystick_linux::close_joystick(int p_id) {
attached_devices.remove(attached_devices.find(joy.devpath));
input->joy_connection_changed(p_id, false, "");
};
-};
+}
static String _hex_str(uint8_t p_byte) {
@@ -271,7 +271,7 @@ static String _hex_str(uint8_t p_byte) {
ret[1] = dict[p_byte & 0xF];
return ret;
-};
+}
void joystick_linux::setup_joystick_properties(int p_id) {
diff --git a/platform/x11/key_mapping_x11.cpp b/platform/x11/key_mapping_x11.cpp
index 190d6925dd..6443d14897 100644
--- a/platform/x11/key_mapping_x11.cpp
+++ b/platform/x11/key_mapping_x11.cpp
@@ -197,6 +197,7 @@ unsigned int KeyMappingX11::get_keycode(KeySym p_keysym) {
return 0;
}
+
KeySym KeyMappingX11::get_keysym(unsigned int p_code) {
// kinda bruteforce.. could optimize.
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index a9a8c73a74..490030398e 100644
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -216,8 +216,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
visual_server =memnew(VisualServerWrapMT(visual_server,get_render_thread_mode()==RENDER_SEPARATE_THREAD));
}
-#if 1
- // NEW_WM_API
// borderless fullscreen window mode
if (current_videomode.fullscreen) {
// needed for lxde/openbox, possibly others
@@ -267,22 +265,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
XSetWMNormalHints(x11_display, x11_window, xsh);
XFree(xsh);
}
-#else
- capture_idle = 0;
- minimized = false;
- maximized = false;
-
- if (current_videomode.fullscreen) {
- //set_wm_border(false);
- set_wm_fullscreen(true);
- }
- if (!current_videomode.resizable) {
- int screen = get_current_screen();
- Size2i screen_size = get_screen_size(screen);
- set_window_size(screen_size);
- set_window_resizable(false);
- }
-#endif
AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton();
@@ -440,7 +422,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
XFreeGC(x11_display, gc);
-
if (cursor == None)
{
ERR_PRINT("FAILED CREATING CURSOR");
@@ -579,7 +560,7 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) {
ButtonPressMask | ButtonReleaseMask |
PointerMotionMask, GrabModeAsync, GrabModeAsync,
x11_window, None, CurrentTime) !=
- GrabSuccess) {
+ GrabSuccess) {
ERR_PRINT("NO GRAB");
}
@@ -643,22 +624,6 @@ OS::VideoMode OS_X11::get_video_mode(int p_screen) const {
void OS_X11::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const {
}
-//#ifdef NEW_WM_API
-#if 0
-// Just now not needed. Can be used for a possible OS.set_border(bool) method
-void OS_X11::set_wm_border(bool p_enabled) {
- // needed for lxde/openbox, possibly others
- Hints hints;
- Atom property;
- hints.flags = 2;
- hints.decorations = p_enabled ? 1L : 0L;
- property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
- XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
- XMapRaised(x11_display, x11_window);
- //XMoveResizeWindow(x11_display, x11_window, 0, 0, 800, 800);
-}
-#endif
-
void OS_X11::set_wm_fullscreen(bool p_enabled) {
// Using EWMH -- Extened Window Manager Hints
XEvent xev;
@@ -811,54 +776,7 @@ Point2 OS_X11::get_window_position() const {
}
void OS_X11::set_window_position(const Point2& p_position) {
- // Using EWMH -- Extended Window Manager Hints
- // to get the size of the decoration
-#if 0
- Atom property = XInternAtom(x11_display,"_NET_FRAME_EXTENTS", True);
- Atom type;
- int format;
- unsigned long len;
- unsigned long remaining;
- unsigned char *data = NULL;
- int result;
-
- result = XGetWindowProperty(
- x11_display,
- x11_window,
- property,
- 0,
- 32,
- False,
- AnyPropertyType,
- &type,
- &format,
- &len,
- &remaining,
- &data
- );
-
- long left = 0L;
- long top = 0L;
-
- if( result == Success ) {
- long *extends = (long *) data;
-
- left = extends[0];
- top = extends[2];
-
- XFree(data);
- }
-
- int screen = get_current_screen();
- Point2i screen_position = get_screen_position(screen);
-
- left -= screen_position.x;
- top -= screen_position.y;
-
- XMoveWindow(x11_display,x11_window,p_position.x - left,p_position.y - top);
-#else
XMoveWindow(x11_display,x11_window,p_position.x,p_position.y);
-#endif
}
Size2 OS_X11::get_window_size() const {
@@ -902,20 +820,19 @@ bool OS_X11::is_window_resizable() const {
}
void OS_X11::set_window_minimized(bool p_enabled) {
- // Using ICCCM -- Inter-Client Communication Conventions Manual
- XEvent xev;
- Atom wm_change = XInternAtom(x11_display, "WM_CHANGE_STATE", False);
+ // Using ICCCM -- Inter-Client Communication Conventions Manual
+ XEvent xev;
+ Atom wm_change = XInternAtom(x11_display, "WM_CHANGE_STATE", False);
- memset(&xev, 0, sizeof(xev));
- xev.type = ClientMessage;
- xev.xclient.window = x11_window;
- xev.xclient.message_type = wm_change;
- xev.xclient.format = 32;
- xev.xclient.data.l[0] = p_enabled ? WM_IconicState : WM_NormalState;
+ memset(&xev, 0, sizeof(xev));
+ xev.type = ClientMessage;
+ xev.xclient.window = x11_window;
+ xev.xclient.message_type = wm_change;
+ xev.xclient.format = 32;
+ xev.xclient.data.l[0] = p_enabled ? WM_IconicState : WM_NormalState;
- XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
+ XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
- //XEvent xev;
Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False);
Atom wm_hidden = XInternAtom(x11_display, "_NET_WM_STATE_HIDDEN", False);
@@ -979,47 +896,33 @@ void OS_X11::set_window_maximized(bool p_enabled) {
xev.xclient.data.l[2] = wm_max_vert;
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
-/* sorry this does not fix it, fails on multi monitor
- XWindowAttributes xwa;
- XGetWindowAttributes(x11_display,DefaultRootWindow(x11_display),&xwa);
- current_videomode.width = xwa.width;
- current_videomode.height = xwa.height;
-//*/
-
-// current_videomode.width = wm_max_horz;
-// current_videomode.height = wm_max_vert;
-
- //Size2 ss = get_screen_size(get_current_screen());
- //current_videomode.width=ss.width;
- //current_videomode.height=ss.height;
-
maximized = p_enabled;
}
bool OS_X11::is_window_maximized() const {
// Using EWMH -- Extended Window Manager Hints
- Atom property = XInternAtom(x11_display,"_NET_WM_STATE",False );
- Atom type;
- int format;
- unsigned long len;
- unsigned long remaining;
- unsigned char *data = NULL;
+ Atom property = XInternAtom(x11_display,"_NET_WM_STATE",False );
+ Atom type;
+ int format;
+ unsigned long len;
+ unsigned long remaining;
+ unsigned char *data = NULL;
- int result = XGetWindowProperty(
- x11_display,
- x11_window,
- property,
- 0,
- 1024,
- False,
- XA_ATOM,
- &type,
- &format,
- &len,
- &remaining,
- &data
- );
+ int result = XGetWindowProperty(
+ x11_display,
+ x11_window,
+ property,
+ 0,
+ 1024,
+ False,
+ XA_ATOM,
+ &type,
+ &format,
+ &len,
+ &remaining,
+ &data
+ );
if(result == Success) {
Atom *atoms = (Atom*) data;
@@ -1383,11 +1286,6 @@ void OS_X11::process_xevents() {
} break;
case FocusIn:
minimized = false;
-#ifdef NEW_WM_API
- if(current_videomode.fullscreen) {
- set_wm_fullscreen(true);
- }
-#endif
main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_IN);
if (mouse_mode==MOUSE_MODE_CAPTURED) {
XGrabPointer(x11_display, x11_window, True,
@@ -1398,12 +1296,6 @@ void OS_X11::process_xevents() {
break;
case FocusOut:
-#ifdef NEW_WM_API
- if(current_videomode.fullscreen) {
- set_wm_fullscreen(false);
- set_window_minimized(true);
- }
-#endif
main_loop->notification(MainLoop::NOTIFICATION_WM_FOCUS_OUT);
if (mouse_mode==MOUSE_MODE_CAPTURED) {
//dear X11, I try, I really try, but you never work, you do whathever you want.
@@ -1547,13 +1439,6 @@ void OS_X11::process_xevents() {
Point2i rel = pos - last_mouse_pos;
-#ifdef NEW_WM_API
- if (mouse_mode==MOUSE_MODE_CAPTURED) {
- pos.x = current_videomode.width / 2;
- pos.y = current_videomode.height / 2;
- }
-#endif
-
InputEvent motion_event;
motion_event.ID=++event_id;
motion_event.type=InputEvent::MOUSE_MOTION;
@@ -1836,7 +1721,7 @@ static String _get_clipboard(Atom p_source, Window x11_window, ::Display* x11_di
return ret;
-};
+}
String OS_X11::get_clipboard() const {
@@ -1848,7 +1733,7 @@ String OS_X11::get_clipboard() const {
};
return ret;
-};
+}
String OS_X11::get_name() {
@@ -2095,4 +1980,4 @@ OS_X11::OS_X11() {
minimized = false;
xim_style=0L;
mouse_mode=MOUSE_MODE_VISIBLE;
-};
+}
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index d63c483ef9..2f4f79904d 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -191,7 +191,7 @@ void ItemList::set_item_disabled(int p_idx,bool p_disabled){
ERR_FAIL_INDEX(p_idx,items.size());
items[p_idx].disabled=p_disabled;
-
+ update();
}
@@ -225,7 +225,7 @@ void ItemList::select(int p_idx,bool p_single){
if (p_single || select_mode==SELECT_SINGLE) {
- if (!items[p_idx].selectable) {
+ if (!items[p_idx].selectable || items[p_idx].disabled) {
return;
}
@@ -237,7 +237,7 @@ void ItemList::select(int p_idx,bool p_single){
ensure_selected_visible=false;
} else {
- if (items[p_idx].selectable) {
+ if (items[p_idx].selectable && !items[p_idx].disabled) {
items[p_idx].selected=true;
}
}
@@ -510,7 +510,7 @@ void ItemList::_input_event(const InputEvent& p_event) {
}
} else {
- if (!mb.doubleclick && !mb.mod.command && select_mode==SELECT_MULTI && items[i].selectable && items[i].selected && p_event.mouse_button.button_index==BUTTON_LEFT) {
+ if (!mb.doubleclick && !mb.mod.command && select_mode==SELECT_MULTI && items[i].selectable && !items[i].disabled && items[i].selected && p_event.mouse_button.button_index==BUTTON_LEFT) {
defer_select_single=i;
return;
}
@@ -694,7 +694,7 @@ void ItemList::_input_event(const InputEvent& p_event) {
if (select_mode==SELECT_MULTI && current>=0 && current<items.size()) {
- if (items[current].selectable && !items[current].selected) {
+ if (items[current].selectable && !items[current].disabled && !items[current].selected) {
select(current,false);
emit_signal("multi_selected",current,true);
} else if (items[current].selected) {
@@ -1029,10 +1029,14 @@ void ItemList::_notification(int p_what) {
draw_rect.size=adj.size;
}
+ Color modulate=Color(1,1,1,1);
+ if (items[i].disabled)
+ modulate.a*=0.5;
+
if (items[i].icon_region.has_no_area())
- draw_texture_rect(items[i].icon, draw_rect );
+ draw_texture_rect(items[i].icon, draw_rect,false,modulate );
else
- draw_texture_rect_region(items[i].icon, draw_rect, items[i].icon_region);
+ draw_texture_rect_region(items[i].icon, draw_rect, items[i].icon_region,modulate);
}
@@ -1053,6 +1057,10 @@ void ItemList::_notification(int p_what) {
else
max_len=size.x;
+ Color modulate=items[i].selected?font_color_selected:font_color;
+ if (items[i].disabled)
+ modulate.a*=0.5;
+
if (icon_mode==ICON_MODE_TOP && max_text_lines>0) {
int ss = items[i].text.length();
@@ -1090,7 +1098,7 @@ void ItemList::_notification(int p_what) {
if (line>=max_text_lines)
break;
}
- ofs+=font->draw_char(get_canvas_item(),text_ofs+Vector2(ofs+(max_len-line_size_cache[line])/2,line*(font_height+line_separation)).floor(),items[i].text[j],items[i].text[j+1],items[i].selected?font_color_selected:font_color);
+ ofs+=font->draw_char(get_canvas_item(),text_ofs+Vector2(ofs+(max_len-line_size_cache[line])/2,line*(font_height+line_separation)).floor(),items[i].text[j],items[i].text[j+1],modulate);
}
//special multiline mode
@@ -1110,7 +1118,7 @@ void ItemList::_notification(int p_what) {
text_ofs+=base_ofs;
text_ofs+=items[i].rect_cache.pos;
- draw_string(font,text_ofs,items[i].text,items[i].selected?font_color_selected:font_color,max_len+1);
+ draw_string(font,text_ofs,items[i].text,modulate,max_len+1);
}
@@ -1203,8 +1211,11 @@ String ItemList::get_tooltip(const Point2& p_pos) const {
}
void ItemList::sort_items_by_text() {
+
items.sort();
update();
+ shape_changed=true;
+
if (select_mode==SELECT_SINGLE) {
for(int i=0;i<items.size();i++) {
if (items[i].selected) {
@@ -1296,7 +1307,7 @@ void ItemList::_bind_methods(){
ObjectTypeDB::bind_method(_MD("remove_item","idx"),&ItemList::remove_item);
ObjectTypeDB::bind_method(_MD("clear"),&ItemList::clear);
- ObjectTypeDB::bind_method(_MD("sort_items_by_text"),&ItemList::clear);
+ ObjectTypeDB::bind_method(_MD("sort_items_by_text"),&ItemList::sort_items_by_text);
ObjectTypeDB::bind_method(_MD("set_fixed_column_width","width"),&ItemList::set_fixed_column_width);
ObjectTypeDB::bind_method(_MD("get_fixed_column_width"),&ItemList::get_fixed_column_width);
diff --git a/tools/editor/editor_profiler.cpp b/tools/editor/editor_profiler.cpp
index c9ee60cd54..13327f0be9 100644
--- a/tools/editor/editor_profiler.cpp
+++ b/tools/editor/editor_profiler.cpp
@@ -135,6 +135,8 @@ void EditorProfiler::_item_edited() {
frame_delay->set_wait_time(0.1);
frame_delay->start();
}
+
+ _update_plot();
}
void EditorProfiler::_update_plot() {