diff options
Diffstat (limited to 'platform')
| -rw-r--r-- | platform/android/audio_driver_jandroid.cpp | 12 | ||||
| -rw-r--r-- | platform/android/audio_driver_opensl.cpp | 6 | ||||
| -rw-r--r-- | platform/android/dir_access_android.cpp | 5 | ||||
| -rw-r--r-- | platform/android/dir_access_jandroid.cpp | 3 | ||||
| -rw-r--r-- | platform/android/export/export.cpp | 4 | ||||
| -rw-r--r-- | platform/android/file_access_android.cpp | 5 | ||||
| -rw-r--r-- | platform/android/file_access_jandroid.cpp | 13 | ||||
| -rw-r--r-- | platform/android/ifaddrs_android.cpp | 11 | ||||
| -rw-r--r-- | platform/android/java_class_wrapper.cpp | 5 | ||||
| -rw-r--r-- | platform/android/java_glue.cpp | 26 | ||||
| -rw-r--r-- | platform/android/java_glue.h | 2 | ||||
| -rw-r--r-- | platform/android/os_android.cpp | 22 | ||||
| -rw-r--r-- | platform/android/thread_jandroid.cpp | 2 | ||||
| -rw-r--r-- | platform/osx/os_osx.h | 2 | ||||
| -rw-r--r-- | platform/osx/os_osx.mm | 5 | ||||
| -rw-r--r-- | platform/windows/os_windows.cpp | 22 | ||||
| -rw-r--r-- | platform/windows/os_windows.h | 1 | ||||
| -rw-r--r-- | platform/x11/detect.py | 5 | ||||
| -rw-r--r-- | platform/x11/joystick_linux.cpp | 4 | ||||
| -rw-r--r-- | platform/x11/key_mapping_x11.cpp | 1 | ||||
| -rw-r--r-- | platform/x11/os_x11.cpp | 203 | ||||
| -rw-r--r-- | platform/x11/os_x11.h | 1 |
22 files changed, 152 insertions, 208 deletions
diff --git a/platform/android/audio_driver_jandroid.cpp b/platform/android/audio_driver_jandroid.cpp index 6d428e3fe..419ed977b 100644 --- a/platform/android/audio_driver_jandroid.cpp +++ b/platform/android/audio_driver_jandroid.cpp @@ -192,29 +192,31 @@ void AudioDriverAndroid::thread_func(JNIEnv *env) { env->CallVoidMethod(gob, _write_buffer, (jshortArray)audioBuffer); } - - } int AudioDriverAndroid::get_mix_rate() const { return mix_rate; } + AudioDriverSW::OutputFormat AudioDriverAndroid::get_output_format() const{ return OUTPUT_STEREO; } + void AudioDriverAndroid::lock(){ if (mutex) mutex->lock(); } + void AudioDriverAndroid::unlock() { if (mutex) mutex->unlock(); } + void AudioDriverAndroid::finish(){ JNIEnv *env = ThreadAndroid::get_env(); @@ -236,13 +238,11 @@ void AudioDriverAndroid::set_pause(bool p_pause) { } -AudioDriverAndroid::AudioDriverAndroid() -{ +AudioDriverAndroid::AudioDriverAndroid() { + s_ad=this; active=false; - - } #endif diff --git a/platform/android/audio_driver_opensl.cpp b/platform/android/audio_driver_opensl.cpp index a908f6193..b7ef1424e 100644 --- a/platform/android/audio_driver_opensl.cpp +++ b/platform/android/audio_driver_opensl.cpp @@ -207,6 +207,7 @@ Error AudioDriverOpenSL::init(){ return OK; } + void AudioDriverOpenSL::start(){ @@ -366,26 +367,31 @@ void AudioDriverOpenSL::start(){ active=true; } + int AudioDriverOpenSL::get_mix_rate() const { return 44100; } + AudioDriverSW::OutputFormat AudioDriverOpenSL::get_output_format() const{ return OUTPUT_STEREO; } + void AudioDriverOpenSL::lock(){ if (active && mutex) mutex->lock(); } + void AudioDriverOpenSL::unlock() { if (active && mutex) mutex->unlock(); } + void AudioDriverOpenSL::finish(){ (*sl)->Destroy(sl); diff --git a/platform/android/dir_access_android.cpp b/platform/android/dir_access_android.cpp index 85df5dc37..79ba83b3e 100644 --- a/platform/android/dir_access_android.cpp +++ b/platform/android/dir_access_android.cpp @@ -61,6 +61,7 @@ String DirAccessAndroid::get_next(){ } + bool DirAccessAndroid::current_is_dir() const{ String sd; @@ -79,9 +80,11 @@ bool DirAccessAndroid::current_is_dir() const{ return false; } + bool DirAccessAndroid::current_is_hidden() const{ return current!="." && current!=".." && current.begins_with("."); } + void DirAccessAndroid::list_dir_end(){ if (aad==NULL) @@ -96,6 +99,7 @@ int DirAccessAndroid::get_drive_count(){ return 0; } + String DirAccessAndroid::get_drive(int p_drive){ return ""; @@ -164,6 +168,7 @@ Error DirAccessAndroid::rename(String p_from, String p_to){ ERR_FAIL_V(ERR_UNAVAILABLE); } + Error DirAccessAndroid::remove(String p_name){ ERR_FAIL_V(ERR_UNAVAILABLE); diff --git a/platform/android/dir_access_jandroid.cpp b/platform/android/dir_access_jandroid.cpp index 8b7cb992d..be2ffde2c 100644 --- a/platform/android/dir_access_jandroid.cpp +++ b/platform/android/dir_access_jandroid.cpp @@ -76,6 +76,7 @@ String DirAccessJAndroid::get_next(){ return ret; } + bool DirAccessJAndroid::current_is_dir() const{ @@ -106,6 +107,7 @@ int DirAccessJAndroid::get_drive_count(){ return 0; } + String DirAccessJAndroid::get_drive(int p_drive){ return ""; @@ -215,6 +217,7 @@ Error DirAccessJAndroid::rename(String p_from, String p_to){ ERR_FAIL_V(ERR_UNAVAILABLE); } + Error DirAccessJAndroid::remove(String p_name){ ERR_FAIL_V(ERR_UNAVAILABLE); diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index f4fafc4fa..10d77aba6 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -1482,6 +1482,7 @@ int EditorExportPlatformAndroid::get_device_count() const { return dc; } + String EditorExportPlatformAndroid::get_device_name(int p_device) const { ERR_FAIL_INDEX_V(p_device,devices.size(),""); @@ -1490,6 +1491,7 @@ String EditorExportPlatformAndroid::get_device_name(int p_device) const { device_lock->unlock(); return s; } + String EditorExportPlatformAndroid::get_device_info(int p_device) const { ERR_FAIL_INDEX_V(p_device,devices.size(),""); @@ -1883,7 +1885,6 @@ bool EditorExportPlatformAndroid::can_export(String *r_error) const { EditorExportPlatformAndroid::~EditorExportPlatformAndroid() { - quit_request=true; Thread::wait_to_finish(device_thread); memdelete(device_lock); @@ -1912,6 +1913,5 @@ void register_android_exporter() { Ref<EditorExportPlatformAndroid> exporter = Ref<EditorExportPlatformAndroid>( memnew(EditorExportPlatformAndroid) ); EditorImportExport::get_singleton()->add_export_platform(exporter); - } diff --git a/platform/android/file_access_android.cpp b/platform/android/file_access_android.cpp index 334d32de0..aefa16ca9 100644 --- a/platform/android/file_access_android.cpp +++ b/platform/android/file_access_android.cpp @@ -74,6 +74,7 @@ void FileAccessAndroid::close() { AAsset_close(a); a=NULL; } + bool FileAccessAndroid::is_open() const { return a!=NULL; @@ -92,6 +93,7 @@ void FileAccessAndroid::seek(size_t p_position) { } } + void FileAccessAndroid::seek_end(int64_t p_position) { ERR_FAIL_COND(!a); @@ -99,10 +101,12 @@ void FileAccessAndroid::seek_end(int64_t p_position) { pos=len+p_position; } + size_t FileAccessAndroid::get_pos() const { return pos; } + size_t FileAccessAndroid::get_len() const { return len; @@ -128,6 +132,7 @@ uint8_t FileAccessAndroid::get_8() const { return byte; } + int FileAccessAndroid::get_buffer(uint8_t *p_dst, int p_length) const { diff --git a/platform/android/file_access_jandroid.cpp b/platform/android/file_access_jandroid.cpp index ea33e9a67..3d2e525bb 100644 --- a/platform/android/file_access_jandroid.cpp +++ b/platform/android/file_access_jandroid.cpp @@ -90,6 +90,7 @@ void FileAccessJAndroid::close() { id=0; } + bool FileAccessJAndroid::is_open() const { return id!=0; @@ -102,6 +103,7 @@ void FileAccessJAndroid::seek(size_t p_position) { ERR_FAIL_COND(!is_open()); env->CallVoidMethod(io,_file_seek,id,p_position); } + void FileAccessJAndroid::seek_end(int64_t p_position) { ERR_FAIL_COND(!is_open()); @@ -109,6 +111,7 @@ void FileAccessJAndroid::seek_end(int64_t p_position) { seek(get_len()); } + size_t FileAccessJAndroid::get_pos() const { JNIEnv *env = ThreadAndroid::get_env(); @@ -116,13 +119,13 @@ size_t FileAccessJAndroid::get_pos() const { return env->CallIntMethod(io,_file_tell,id); } + size_t FileAccessJAndroid::get_len() const { JNIEnv *env = ThreadAndroid::get_env(); ERR_FAIL_COND_V(!is_open(),0); return env->CallIntMethod(io,_file_get_size,id); - } bool FileAccessJAndroid::eof_reached() const { @@ -167,7 +170,6 @@ Error FileAccessJAndroid::get_error() const { void FileAccessJAndroid::store_8(uint8_t p_dest) { - } bool FileAccessJAndroid::file_exists(const String& p_path) { @@ -195,7 +197,6 @@ bool FileAccessJAndroid::file_exists(const String& p_path) { void FileAccessJAndroid::setup( jobject p_io) { - io=p_io; JNIEnv *env = ThreadAndroid::get_env(); @@ -239,14 +240,12 @@ void FileAccessJAndroid::setup( jobject p_io) { } -FileAccessJAndroid::FileAccessJAndroid() -{ +FileAccessJAndroid::FileAccessJAndroid() { id=0; } -FileAccessJAndroid::~FileAccessJAndroid() -{ +FileAccessJAndroid::~FileAccessJAndroid() { if (is_open()) close(); diff --git a/platform/android/ifaddrs_android.cpp b/platform/android/ifaddrs_android.cpp index c1e9eb358..f6d5cdbe7 100644 --- a/platform/android/ifaddrs_android.cpp +++ b/platform/android/ifaddrs_android.cpp @@ -38,13 +38,16 @@ #include <errno.h> #include <linux/netlink.h> #include <linux/rtnetlink.h> + struct netlinkrequest { nlmsghdr header; ifaddrmsg msg; }; + namespace { const int kMaxReadSize = 4096; -}; +} + static int set_ifname(struct ifaddrs* ifaddr, int interface) { char buf[IFNAMSIZ] = {0}; char* name = if_indextoname(interface, buf); @@ -55,6 +58,7 @@ static int set_ifname(struct ifaddrs* ifaddr, int interface) { strncpy(ifaddr->ifa_name, name, strlen(name) + 1); return 0; } + static int set_flags(struct ifaddrs* ifaddr) { int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd == -1) { @@ -71,6 +75,7 @@ static int set_flags(struct ifaddrs* ifaddr) { ifaddr->ifa_flags = ifr.ifr_flags; return 0; } + static int set_addresses(struct ifaddrs* ifaddr, ifaddrmsg* msg, void* data, size_t len) { if (msg->ifa_family == AF_INET) { @@ -89,6 +94,7 @@ static int set_addresses(struct ifaddrs* ifaddr, ifaddrmsg* msg, void* data, } return 0; } + static int make_prefixes(struct ifaddrs* ifaddr, int family, int prefixlen) { char* prefix = NULL; if (family == AF_INET) { @@ -120,6 +126,7 @@ static int make_prefixes(struct ifaddrs* ifaddr, int family, int prefixlen) { *prefix = remainder; return 0; } + static int populate_ifaddrs(struct ifaddrs* ifaddr, ifaddrmsg* msg, void* bytes, size_t len) { if (set_ifname(ifaddr, msg->ifa_index) != 0) { @@ -136,6 +143,7 @@ static int populate_ifaddrs(struct ifaddrs* ifaddr, ifaddrmsg* msg, void* bytes, } return 0; } + int getifaddrs(struct ifaddrs** result) { int fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (fd < 0) { @@ -207,6 +215,7 @@ int getifaddrs(struct ifaddrs** result) { freeifaddrs(start); return -1; } + void freeifaddrs(struct ifaddrs* addrs) { struct ifaddrs* last = NULL; struct ifaddrs* cursor = addrs; diff --git a/platform/android/java_class_wrapper.cpp b/platform/android/java_class_wrapper.cpp index 4fda13fec..cc1e5b61d 100644 --- a/platform/android/java_class_wrapper.cpp +++ b/platform/android/java_class_wrapper.cpp @@ -540,25 +540,21 @@ Variant JavaClass::call(const StringName& p_method,const Variant** p_args,int p_ JavaClass::JavaClass() { - } ///////////////////// Variant JavaObject::call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error){ - return Variant(); } JavaObject::JavaObject(const Ref<JavaClass>& p_base,jobject *p_instance) { - } JavaObject::~JavaObject(){ - } @@ -1356,5 +1352,4 @@ JavaClassWrapper::JavaClassWrapper(jobject p_activity) { bclass = env->FindClass("java/lang/Double"); Double_doubleValue = env->GetMethodID(bclass, "doubleValue", "()D"); - } diff --git a/platform/android/java_glue.cpp b/platform/android/java_glue.cpp index 96e6b8523..e5b655e5d 100644 --- a/platform/android/java_glue.cpp +++ b/platform/android/java_glue.cpp @@ -215,7 +215,7 @@ jvalret _variant_to_jvalue(JNIEnv *env, Variant::Type p_type, const Variant* p_a } return v; -}; +} String _get_class_name(JNIEnv * env, jclass cls, bool* array) { @@ -233,7 +233,7 @@ String _get_class_name(JNIEnv * env, jclass cls, bool* array) { return name; -}; +} Variant _jobject_to_variant(JNIEnv * env, jobject obj) { @@ -406,7 +406,7 @@ Variant _jobject_to_variant(JNIEnv * env, jobject obj) { env->DeleteLocalRef(c); return Variant(); -}; +} class JNISingleton : public Object { @@ -731,27 +731,27 @@ static void _show_vk(const String& p_existing) { JNIEnv* env = ThreadAndroid::get_env(); jstring jStr = env->NewStringUTF(p_existing.utf8().get_data()); env->CallVoidMethod(godot_io, _showKeyboard, jStr); -}; +} static void _set_screen_orient(int p_orient) { JNIEnv* env = ThreadAndroid::get_env(); env->CallVoidMethod(godot_io, _setScreenOrientation, p_orient ); -}; +} static String _get_system_dir(int p_dir) { JNIEnv *env = ThreadAndroid::get_env(); jstring s =(jstring)env->CallObjectMethod(godot_io,_getSystemDir,p_dir); return String(env->GetStringUTFChars( s, NULL )); -}; +} static void _hide_vk() { JNIEnv* env = ThreadAndroid::get_env(); env->CallVoidMethod(godot_io, _hideKeyboard); -}; +} // virtual Error native_video_play(String p_path); // virtual bool native_video_is_playing(); @@ -953,7 +953,6 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv * e os_android->reload_gfx(); } - } @@ -968,7 +967,6 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_quit(JNIEnv * env, jo static void _initialize_java_modules() { - String modules = Globals::get_singleton()->get("android/modules"); Vector<String> mods = modules.split(",",false); print_line("ANDROID MODULES : " + modules); @@ -1417,7 +1415,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv * en input_mutex->lock(); joy_events.push_back(jevent); input_mutex->unlock(); -}; +} JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv * env, jobject obj, jint p_device, jint p_axis, jfloat p_value) { @@ -1430,7 +1428,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv * env, input_mutex->lock(); joy_events.push_back(jevent); input_mutex->unlock(); -}; +} JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyhat(JNIEnv * env, jobject obj, jint p_device, jint p_hat_x, jint p_hat_y) { OS_Android::JoystickEvent jevent; @@ -1493,7 +1491,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv * env, job input_mutex->lock(); key_events.push_back(ievent); input_mutex->unlock(); -}; +} JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_accelerometer(JNIEnv * env, jobject obj, jfloat x, jfloat y, jfloat z) { @@ -1722,7 +1720,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv * e env->PopLocalFrame(NULL); -}; +} JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * env, jobject p_obj, jint ID, jstring method, jobjectArray params) { @@ -1757,7 +1755,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * // something env->PopLocalFrame(NULL); -}; +} //Main::cleanup(); diff --git a/platform/android/java_glue.h b/platform/android/java_glue.h index ae7ced45e..f1c83f01e 100644 --- a/platform/android/java_glue.h +++ b/platform/android/java_glue.h @@ -58,7 +58,7 @@ extern "C" { JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv * env, jobject obj, jstring path); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv * env, jobject obj, jint ID, jstring method, jobjectArray params); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv * env, jobject obj, jint ID, jstring method, jobjectArray params); -}; +} #endif diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index 1bddf13ad..4e395a6f9 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -53,6 +53,7 @@ int OS_Android::get_video_driver_count() const { return 1; } + const char * OS_Android::get_video_driver_name(int p_driver) const { return "GLES2"; @@ -271,17 +272,18 @@ bool OS_Android::is_mouse_grab_enabled() const { //*sigh* technology has evolved so much since i was a kid.. return false; } + Point2 OS_Android::get_mouse_pos() const { return Point2(); } + int OS_Android::get_mouse_button_state() const { return 0; } void OS_Android::set_window_title(const String& p_title) { - } //interesting byt not yet @@ -290,13 +292,13 @@ void OS_Android::set_window_title(const String& p_title) { void OS_Android::set_video_mode(const VideoMode& p_video_mode,int p_screen) { - } OS::VideoMode OS_Android::get_video_mode(int p_screen) const { return default_videomode; } + void OS_Android::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const { p_list->push_back(default_videomode); @@ -340,6 +342,7 @@ void OS_Android::main_loop_begin() { if (main_loop) main_loop->init(); } + bool OS_Android::main_loop_iterate() { if (!main_loop) @@ -394,7 +397,7 @@ void OS_Android::process_event(InputEvent p_event) { p_event.ID = last_id++; input->parse_input_event(p_event); -}; +} void OS_Android::process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points) { @@ -627,7 +630,7 @@ bool OS_Android::has_touchscreen_ui_hint() const { bool OS_Android::has_virtual_keyboard() const { return true; -}; +} void OS_Android::show_virtual_keyboard(const String& p_existing_text,const Rect2& p_screen_rect) { @@ -637,7 +640,7 @@ void OS_Android::show_virtual_keyboard(const String& p_existing_text,const Rect2 ERR_PRINT("Virtual keyboard not available"); }; -}; +} void OS_Android::hide_virtual_keyboard() { @@ -648,7 +651,7 @@ void OS_Android::hide_virtual_keyboard() { ERR_PRINT("Virtual keyboard not available"); }; -}; +} void OS_Android::init_video_mode(int p_video_width,int p_video_height) { @@ -684,7 +687,7 @@ Error OS_Android::shell_open(String p_uri) { if (open_uri_func) return open_uri_func(p_uri)?ERR_CANT_OPEN:OK; return ERR_UNAVAILABLE; -}; +} String OS_Android::get_resource_dir() const { @@ -749,12 +752,11 @@ String OS_Android::get_data_dir() const { return "."; //return Globals::get_singleton()->get_singleton_object("GodotOS")->call("get_data_dir"); -}; +} void OS_Android::set_screen_orientation(ScreenOrientation p_orientation) { - if (set_screen_orientation_func) set_screen_orientation_func(p_orientation); } @@ -817,7 +819,6 @@ String OS_Android::get_joy_guid(int p_device) const { OS_Android::OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFunc p_open_uri_func, GetDataDirFunc p_get_data_dir_func,GetLocaleFunc p_get_locale_func,GetModelFunc p_get_model_func, GetScreenDPIFunc p_get_screen_dpi_func, ShowVirtualKeyboardFunc p_show_vk, HideVirtualKeyboardFunc p_hide_vk, SetScreenOrientationFunc p_screen_orient,GetUniqueIDFunc p_get_unique_id,GetSystemDirFunc p_get_sdir_func, VideoPlayFunc p_video_play_func, VideoIsPlayingFunc p_video_is_playing_func, VideoPauseFunc p_video_pause_func, VideoStopFunc p_video_stop_func, SetKeepScreenOnFunc p_set_keep_screen_on_func, bool p_use_apk_expansion) { - use_apk_expansion=p_use_apk_expansion; default_videomode.width=800; default_videomode.height=600; @@ -856,5 +857,4 @@ OS_Android::OS_Android(GFXInitFunc p_gfx_init_func,void*p_gfx_init_ud, OpenURIFu OS_Android::~OS_Android() { - } diff --git a/platform/android/thread_jandroid.cpp b/platform/android/thread_jandroid.cpp index 61ee23758..73818b282 100644 --- a/platform/android/thread_jandroid.cpp +++ b/platform/android/thread_jandroid.cpp @@ -64,10 +64,12 @@ Thread* ThreadAndroid::create_func_jandroid(ThreadCreateCallback p_callback,void return tr; } + Thread::ID ThreadAndroid::get_thread_ID_func_jandroid() { return (ID)pthread_self(); } + void ThreadAndroid::wait_to_finish_func_jandroid(Thread* p_thread) { ThreadAndroid *tp=static_cast<ThreadAndroid*>(p_thread); diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index e1c33cb01..8f89695a6 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -202,7 +202,7 @@ public: virtual bool is_window_minimized() const; virtual void set_window_maximized(bool p_enabled); virtual bool is_window_maximized() const; - + virtual void request_attention(); void run(); diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index 45c500ec3..dc87f767f 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -1577,6 +1577,11 @@ void OS_OSX::move_window_to_foreground() { [window_object orderFrontRegardless]; } +void OS_OSX::request_attention() { + + [NSApp requestUserAttention:NSCriticalRequest]; +} + String OS_OSX::get_executable_path() const { int ret; diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index b0a50ca4b..6aee0d239 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -581,11 +581,14 @@ LRESULT OS_Windows::WndProc(HWND hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam) { } } else if (mouse_mode!=MOUSE_MODE_CAPTURED) { // for reasons unknown to mankind, wheel comes in screen cordinates - RECT rect; - GetWindowRect(hWnd,&rect); - mb.x-=rect.left; - mb.y-=rect.top; + POINT coords; + coords.x = mb.x; + coords.y = mb.y; + ScreenToClient(hWnd, &coords); + + mb.x = coords.x; + mb.y = coords.y; } if (main_loop) { @@ -1683,6 +1686,17 @@ bool OS_Windows::get_borderless_window() { return video_mode.borderless_window; } +void OS_Windows::request_attention() { + + FLASHWINFO info; + info.cbSize = sizeof(FLASHWINFO); + info.hwnd = hWnd; + info.dwFlags = FLASHW_TRAY; + info.dwTimeout = 0; + info.uCount = 2; + FlashWindowEx(&info); +} + void OS_Windows::print_error(const char* p_function, const char* p_file, int p_line, const char* p_code, const char* p_rationale, ErrorType p_type) { HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 5acb300c0..e3e037e57 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -230,6 +230,7 @@ public: virtual bool is_window_minimized() const; virtual void set_window_maximized(bool p_enabled); virtual bool is_window_maximized() const; + virtual void request_attention(); virtual void set_borderless_window(int p_borderless); virtual bool get_borderless_window(); diff --git a/platform/x11/detect.py b/platform/x11/detect.py index 2be8b01dc..356de7b2b 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 4a6a4f3a5..3b854a8d4 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 190d6925d..6443d1489 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 20fae72ab..490030398 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; @@ -1043,6 +946,26 @@ bool OS_X11::is_window_maximized() const { return false; } +void OS_X11::request_attention() { + // Using EWMH -- Extended Window Manager Hints + // + // Sets the _NET_WM_STATE_DEMANDS_ATTENTION atom for WM_STATE + // Will be unset by the window manager after user react on the request for attention + // + XEvent xev; + Atom wm_state = XInternAtom(x11_display, "_NET_WM_STATE", False); + Atom wm_attention = XInternAtom(x11_display, "_NET_WM_STATE_DEMANDS_ATTENTION", False); + + memset(&xev, 0, sizeof(xev)); + xev.type = ClientMessage; + xev.xclient.window = x11_window; + xev.xclient.message_type = wm_state; + xev.xclient.format = 32; + xev.xclient.data.l[0] = _NET_WM_STATE_ADD; + xev.xclient.data.l[1] = wm_attention; + + XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); +} InputModifierState OS_X11::get_key_modifier_state(unsigned int p_x11_state) { @@ -1363,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, @@ -1378,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. @@ -1527,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; @@ -1816,7 +1721,7 @@ static String _get_clipboard(Atom p_source, Window x11_window, ::Display* x11_di return ret; -}; +} String OS_X11::get_clipboard() const { @@ -1828,7 +1733,7 @@ String OS_X11::get_clipboard() const { }; return ret; -}; +} String OS_X11::get_name() { @@ -2075,4 +1980,4 @@ OS_X11::OS_X11() { minimized = false; xim_style=0L; mouse_mode=MOUSE_MODE_VISIBLE; -}; +} diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index 71bbe726d..b27f71406 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -253,6 +253,7 @@ public: virtual bool is_window_minimized() const; virtual void set_window_maximized(bool p_enabled); virtual bool is_window_maximized() const; + virtual void request_attention(); virtual void move_window_to_foreground(); virtual void alert(const String& p_alert,const String& p_title="ALERT!"); |
