annotate src/frame-gtk.c @ 4952:19a72041c5ed

Mule-izing, various fixes related to char * arguments -------------------- ChangeLog entries follow: -------------------- modules/ChangeLog addition: 2010-01-26 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c: * postgresql/postgresql.c (CHECK_LIVE_CONNECTION): * postgresql/postgresql.c (print_pgresult): * postgresql/postgresql.c (Fpq_conn_defaults): * postgresql/postgresql.c (Fpq_connectdb): * postgresql/postgresql.c (Fpq_connect_start): * postgresql/postgresql.c (Fpq_result_status): * postgresql/postgresql.c (Fpq_res_status): Mule-ize large parts of it. 2010-01-26 Ben Wing <ben@xemacs.org> * ldap/eldap.c (print_ldap): * ldap/eldap.c (allocate_ldap): Use write_ascstring(). src/ChangeLog addition: 2010-01-26 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (build_ascstring): * alloc.c (build_msg_cistring): * alloc.c (staticpro_1): * alloc.c (staticpro_name): * alloc.c (staticpro_nodump_1): * alloc.c (staticpro_nodump_name): * alloc.c (unstaticpro_nodump_1): * alloc.c (mcpro_1): * alloc.c (mcpro_name): * alloc.c (object_memory_usage_stats): * alloc.c (common_init_alloc_early): * alloc.c (init_alloc_once_early): * buffer.c (print_buffer): * buffer.c (vars_of_buffer): * buffer.c (common_init_complex_vars_of_buffer): * buffer.c (init_initial_directory): * bytecode.c (invalid_byte_code): * bytecode.c (print_compiled_function): * bytecode.c (mark_compiled_function): * chartab.c (print_table_entry): * chartab.c (print_char_table): * config.h.in: * console-gtk.c: * console-gtk.c (gtk_device_to_console_connection): * console-gtk.c (gtk_semi_canonicalize_console_connection): * console-gtk.c (gtk_canonicalize_console_connection): * console-gtk.c (gtk_semi_canonicalize_device_connection): * console-gtk.c (gtk_canonicalize_device_connection): * console-stream.c (stream_init_frame_1): * console-stream.c (vars_of_console_stream): * console-stream.c (init_console_stream): * console-x.c (x_semi_canonicalize_console_connection): * console-x.c (x_semi_canonicalize_device_connection): * console-x.c (x_canonicalize_device_connection): * console-x.h: * data.c (eq_with_ebola_notice): * data.c (Fsubr_interactive): * data.c (Fnumber_to_string): * data.c (digit_to_number): * device-gtk.c (gtk_init_device): * device-msw.c (print_devmode): * device-x.c (x_event_name): * dialog-msw.c (handle_directory_dialog_box): * dialog-msw.c (handle_file_dialog_box): * dialog-msw.c (vars_of_dialog_mswindows): * doc.c (weird_doc): * doc.c (Fsnarf_documentation): * doc.c (vars_of_doc): * dumper.c (pdump): * dynarr.c: * dynarr.c (Dynarr_realloc): * editfns.c (Fuser_real_login_name): * editfns.c (get_home_directory): * elhash.c (print_hash_table_data): * elhash.c (print_hash_table): * emacs.c (main_1): * emacs.c (vars_of_emacs): * emodules.c: * emodules.c (_emodules_list): * emodules.c (Fload_module): * emodules.c (Funload_module): * emodules.c (Flist_modules): * emodules.c (find_make_module): * emodules.c (attempt_module_delete): * emodules.c (emodules_load): * emodules.c (emodules_doc_subr): * emodules.c (emodules_doc_sym): * emodules.c (syms_of_module): * emodules.c (vars_of_module): * emodules.h: * eval.c (print_subr): * eval.c (signal_call_debugger): * eval.c (build_error_data): * eval.c (signal_error): * eval.c (maybe_signal_error): * eval.c (signal_continuable_error): * eval.c (maybe_signal_continuable_error): * eval.c (signal_error_2): * eval.c (maybe_signal_error_2): * eval.c (signal_continuable_error_2): * eval.c (maybe_signal_continuable_error_2): * eval.c (signal_ferror): * eval.c (maybe_signal_ferror): * eval.c (signal_continuable_ferror): * eval.c (maybe_signal_continuable_ferror): * eval.c (signal_ferror_with_frob): * eval.c (maybe_signal_ferror_with_frob): * eval.c (signal_continuable_ferror_with_frob): * eval.c (maybe_signal_continuable_ferror_with_frob): * eval.c (syntax_error): * eval.c (syntax_error_2): * eval.c (maybe_syntax_error): * eval.c (sferror): * eval.c (sferror_2): * eval.c (maybe_sferror): * eval.c (invalid_argument): * eval.c (invalid_argument_2): * eval.c (maybe_invalid_argument): * eval.c (invalid_constant): * eval.c (invalid_constant_2): * eval.c (maybe_invalid_constant): * eval.c (invalid_operation): * eval.c (invalid_operation_2): * eval.c (maybe_invalid_operation): * eval.c (invalid_change): * eval.c (invalid_change_2): * eval.c (maybe_invalid_change): * eval.c (invalid_state): * eval.c (invalid_state_2): * eval.c (maybe_invalid_state): * eval.c (wtaerror): * eval.c (stack_overflow): * eval.c (out_of_memory): * eval.c (print_multiple_value): * eval.c (issue_call_trapping_problems_warning): * eval.c (backtrace_specials): * eval.c (backtrace_unevalled_args): * eval.c (Fbacktrace): * eval.c (warn_when_safe): * event-Xt.c (modwarn): * event-Xt.c (modbarf): * event-Xt.c (check_modifier): * event-Xt.c (store_modifier): * event-Xt.c (emacs_Xt_format_magic_event): * event-Xt.c (describe_event): * event-gtk.c (dragndrop_data_received): * event-gtk.c (store_modifier): * event-gtk.c (gtk_reset_modifier_mapping): * event-msw.c (dde_eval_string): * event-msw.c (Fdde_alloc_advise_item): * event-msw.c (mswindows_dde_callback): * event-msw.c (FROB): * event-msw.c (emacs_mswindows_format_magic_event): * event-stream.c (external_debugging_print_event): * event-stream.c (execute_help_form): * event-stream.c (vars_of_event_stream): * events.c (print_event_1): * events.c (print_event): * events.c (event_equal): * extents.c (print_extent_1): * extents.c (print_extent): * extents.c (vars_of_extents): * faces.c (print_face): * faces.c (complex_vars_of_faces): * file-coding.c: * file-coding.c (print_coding_system): * file-coding.c (print_coding_system_in_print_method): * file-coding.c (default_query_method): * file-coding.c (find_coding_system): * file-coding.c (make_coding_system_1): * file-coding.c (chain_print): * file-coding.c (undecided_print): * file-coding.c (gzip_print): * file-coding.c (vars_of_file_coding): * file-coding.c (complex_vars_of_file_coding): * fileio.c: * fileio.c (report_file_type_error): * fileio.c (report_error_with_errno): * fileio.c (report_file_error): * fileio.c (barf_or_query_if_file_exists): * fileio.c (vars_of_fileio): * floatfns.c (matherr): * fns.c (print_bit_vector): * fns.c (Fmapconcat): * fns.c (add_suffix_to_symbol): * fns.c (add_prefix_to_symbol): * frame-gtk.c: * frame-gtk.c (Fgtk_window_id): * frame-x.c (def): * frame-x.c (x_cde_transfer_callback): * frame.c: * frame.c (Fmake_frame): * gc.c (show_gc_cursor_and_message): * gc.c (vars_of_gc): * glyphs-eimage.c (png_instantiate): * glyphs-eimage.c (tiff_instantiate): * glyphs-gtk.c (gtk_print_image_instance): * glyphs-msw.c (mswindows_print_image_instance): * glyphs-x.c (x_print_image_instance): * glyphs-x.c (update_widget_face): * glyphs.c (make_string_from_file): * glyphs.c (print_image_instance): * glyphs.c (signal_image_error): * glyphs.c (signal_image_error_2): * glyphs.c (signal_double_image_error): * glyphs.c (signal_double_image_error_2): * glyphs.c (xbm_mask_file_munging): * glyphs.c (pixmap_to_lisp_data): * glyphs.h: * gui.c (gui_item_display_flush_left): * hpplay.c (player_error_internal): * hpplay.c (myHandler): * intl-win32.c: * intl-win32.c (langcode_to_lang): * intl-win32.c (sublangcode_to_lang): * intl-win32.c (Fmswindows_get_locale_info): * intl-win32.c (lcid_to_locale_mule_or_no): * intl-win32.c (mswindows_multibyte_to_unicode_print): * intl-win32.c (complex_vars_of_intl_win32): * keymap.c: * keymap.c (print_keymap): * keymap.c (ensure_meta_prefix_char_keymapp): * keymap.c (Fkey_description): * keymap.c (Ftext_char_description): * lisp.h: * lisp.h (struct): * lisp.h (DECLARE_INLINE_HEADER): * lread.c (Fload_internal): * lread.c (locate_file): * lread.c (read_escape): * lread.c (read_raw_string): * lread.c (read1): * lread.c (read_list): * lread.c (read_compiled_function): * lread.c (init_lread): * lrecord.h: * marker.c (print_marker): * marker.c (marker_equal): * menubar-msw.c (displayable_menu_item): * menubar-x.c (command_builder_operate_menu_accelerator): * menubar.c (vars_of_menubar): * minibuf.c (reinit_complex_vars_of_minibuf): * minibuf.c (complex_vars_of_minibuf): * mule-charset.c (Fmake_charset): * mule-charset.c (complex_vars_of_mule_charset): * mule-coding.c (iso2022_print): * mule-coding.c (fixed_width_query): * number.c (bignum_print): * number.c (ratio_print): * number.c (bigfloat_print): * number.c (bigfloat_finalize): * objects-msw.c: * objects-msw.c (mswindows_color_to_string): * objects-msw.c (mswindows_color_list): * objects-tty.c: * objects-tty.c (tty_font_list): * objects-tty.c (tty_find_charset_font): * objects-xlike-inc.c (xft_find_charset_font): * objects-xlike-inc.c (endif): * print.c: * print.c (write_istring): * print.c (write_ascstring): * print.c (Fterpri): * print.c (Fprint): * print.c (print_error_message): * print.c (print_vector_internal): * print.c (print_cons): * print.c (print_string): * print.c (printing_unreadable_object): * print.c (print_internal): * print.c (print_float): * print.c (print_symbol): * process-nt.c (mswindows_report_winsock_error): * process-nt.c (nt_canonicalize_host_name): * process-unix.c (unix_canonicalize_host_name): * process.c (print_process): * process.c (report_process_error): * process.c (report_network_error): * process.c (make_process_internal): * process.c (Fstart_process_internal): * process.c (status_message): * process.c (putenv_internal): * process.c (vars_of_process): * process.h: * profile.c (vars_of_profile): * rangetab.c (print_range_table): * realpath.c (vars_of_realpath): * redisplay.c (vars_of_redisplay): * search.c (wordify): * search.c (Freplace_match): * sheap.c (sheap_adjust_h): * sound.c (report_sound_error): * sound.c (Fplay_sound_file): * specifier.c (print_specifier): * symbols.c (Fsubr_name): * symbols.c (do_symval_forwarding): * symbols.c (set_default_buffer_slot_variable): * symbols.c (set_default_console_slot_variable): * symbols.c (store_symval_forwarding): * symbols.c (default_value): * symbols.c (defsymbol_massage_name_1): * symbols.c (defsymbol_massage_name_nodump): * symbols.c (defsymbol_massage_name): * symbols.c (defsymbol_massage_multiword_predicate_nodump): * symbols.c (defsymbol_massage_multiword_predicate): * symbols.c (defsymbol_nodump): * symbols.c (defsymbol): * symbols.c (defkeyword): * symbols.c (defkeyword_massage_name): * symbols.c (check_module_subr): * symbols.c (deferror_1): * symbols.c (deferror): * symbols.c (deferror_massage_name): * symbols.c (deferror_massage_name_and_message): * symbols.c (defvar_magic): * symeval.h: * symeval.h (DEFVAR_SYMVAL_FWD): * sysdep.c: * sysdep.c (init_system_name): * sysdll.c: * sysdll.c (MAYBE_PREPEND_UNDERSCORE): * sysdll.c (dll_function): * sysdll.c (dll_variable): * sysdll.c (dll_error): * sysdll.c (dll_open): * sysdll.c (dll_close): * sysdll.c (image_for_address): * sysdll.c (my_find_image): * sysdll.c (search_linked_libs): * sysdll.h: * sysfile.h: * sysfile.h (DEFAULT_DIRECTORY_FALLBACK): * syswindows.h: * tests.c (DFC_CHECK_LENGTH): * tests.c (DFC_CHECK_CONTENT): * tests.c (Ftest_hash_tables): * text.c (vars_of_text): * text.h: * tooltalk.c (tt_opnum_string): * tooltalk.c (tt_message_arg_ival_string): * tooltalk.c (Ftooltalk_default_procid): * tooltalk.c (Ftooltalk_default_session): * tooltalk.c (init_tooltalk): * tooltalk.c (vars_of_tooltalk): * ui-gtk.c (Fdll_load): * ui-gtk.c (type_to_marshaller_type): * ui-gtk.c (Fgtk_import_function_internal): * ui-gtk.c (emacs_gtk_object_printer): * ui-gtk.c (emacs_gtk_boxed_printer): * unicode.c (unicode_to_ichar): * unicode.c (unicode_print): * unicode.c (unicode_query): * unicode.c (vars_of_unicode): * unicode.c (complex_vars_of_unicode): * win32.c: * win32.c (mswindows_report_process_error): * window.c (print_window): * xemacs.def.in.in: BASIC IDEA: Further fixing up uses of char * and CIbyte * to reflect their actual semantics; Mule-izing some code; redoing of the not-yet-working code to handle message translation. Clean up code to handle message-translation (not yet working). Create separate versions of build_msg_string() for working with Ibyte *, CIbyte *, and Ascbyte * arguments. Assert that Ascbyte * arguments are pure-ASCII. Make build_msg_string() be the same as build_msg_ascstring(). Create same three versions of GETTEXT() and DEFER_GETTEXT(). Also create build_defer_string() and variants for the equivalent of DEFER_GETTEXT() when building a string. Remove old CGETTEXT(). Clean up code where GETTEXT(), DEFER_GETTEXT(), build_msg_string(), etc. was being called and introduce some new calls to build_msg_string(), etc. Remove GETTEXT() from calls to weird_doc() -- we assume that the message snarfer knows about weird_doc(). Remove uses of DEFER_GETTEXT() from error messages in sysdep.c and instead use special comments /* @@@begin-snarf@@@ */ and /* @@@end-snarf@@@ */ that the message snarfer presumably knows about. Create build_ascstring() and use it in many instances in place of build_string(). The purpose of having Ascbyte * variants is to make the code more self-documenting in terms of what sort of semantics is expected for char * strings. In fact in the process of looking for uses of build_string(), much improperly Mule-ized was discovered. Mule-ize a lot of code as described in previous paragraph, e.g. in sysdep.c. Make the error functions take Ascbyte * strings and fix up a couple of places where non-pure-ASCII strings were being passed in (file-coding.c, mule-coding.c, unicode.c). (It's debatable whether we really need to make the error functions work this way. It helps catch places where code is written in a way that message translation won't work, but we may well never implement message translation.) Make staticpro() and friends take Ascbyte * strings instead of raw char * strings. Create a const_Ascbyte_ptr dynarr type to describe what's held by staticpro_names[] and friends, create pdump descriptions for const_Ascbyte_ptr dynarrs, and use them in place of specially-crafted staticpro descriptions. Mule-ize certain other functions (e.g. x_event_name) by correcting raw use of char * to Ascbyte *, Rawbyte * or another such type, and raw use of char[] buffers to another type (usually Ascbyte[]). Change many uses of write_c_string() to write_msg_string(), write_ascstring(), etc. Mule-ize emodules.c, emodules.h, sysdll.h. Fix some un-Mule-ized code in intl-win32.c. A comment in event-Xt.c and the limitations of the message snarfer (make-msgfile or whatever) is presumably incorrect -- it should be smart enough to handle function calls spread over more than one line. Clean up code in event-Xt.c that was written awkwardly for this reason. In config.h.in, instead of NEED_ERROR_CHECK_TYPES_INLINES, create a more general XEMACS_DEFS_NEEDS_INLINE_DECLS to indicate when inlined functions need to be declared in xemacs.defs.in.in, and make use of it in xemacs.defs.in.in. We need to do this because postgresql.c now calls qxestrdup(), which is an inline function. Make nconc2() and other such functions MODULE_API and put them in xemacs.defs.in.in since postgresql.c now uses them. Clean up indentation in lread.c and a few other places. In text.h, document ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN(), group together the stand-in encodings and add some more for DLL symbols, function and variable names, etc.
author Ben Wing <ben@xemacs.org>
date Tue, 26 Jan 2010 23:22:30 -0600
parents 229bd619740a
children e813cf16c015
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1 /* Functions for the GTK toolkit.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 Copyright (C) 1989, 1992-5, 1997 Free Software Foundation, Inc.
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
3 Copyright (C) 1995, 1996, 2002, 2003 Ben Wing.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
5 This file is part of XEmacs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
10 later version.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
11
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
15 for more details.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
16
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
21
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22 /* Synched up with: Not synched with FSF. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24 /* Substantially rewritten for XEmacs. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25 /* Revamped to use Gdk/Gtk by William Perry */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27 #include <config.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28 #include "lisp.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
29
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
30 #include "buffer.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
31 #include "device-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
32 #include "events.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
33 #include "extents.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
34 #include "faces.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
35 #include "frame-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
36 #include "window.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
37
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
38 #ifdef HAVE_DRAGNDROP
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
39 #include "dragdrop.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
40 #endif
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
41
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
42 #include "elhash.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
43 #include "console-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44 #include "glyphs-gtk.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
45 #include "objects-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46 #include "scrollbar-gtk.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
47 #include "ui-gtk.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
48
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
49 #include "gtk-xemacs.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 #ifdef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52 #include <libgnomeui/libgnomeui.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
54
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
55 #define BORDER_WIDTH 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
56 #define INTERNAL_BORDER_WIDTH 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
57
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
58 #define TRANSIENT_DATA_IDENTIFIER "xemacs::transient_for"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
59 #define UNMAPPED_DATA_IDENTIFIER "xemacs::initially_unmapped"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
60
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
61 #define STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
62
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
64 #include <gdk/gdkx.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
65 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
66
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
67 /* Default properties to use when creating frames. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
68 Lisp_Object Vdefault_gtk_frame_plist;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
69
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 Lisp_Object Qdetachable_menubar;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 Lisp_Object Qtext_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72 Lisp_Object Qcontainer_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 Lisp_Object Qshell_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
76 EXFUN (Fgtk_window_id, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
77 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80 enum {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81 TARGET_TYPE_STRING,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
82 TARGET_TYPE_URI_LIST,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
83 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
84
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 static GtkTargetEntry dnd_target_table[] = {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 { "STRING", 0, TARGET_TYPE_STRING },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87 { "text/plain", 0, TARGET_TYPE_STRING },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
88 { "text/uri-list", 0, TARGET_TYPE_URI_LIST },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89 { "_NETSCAPE_URL", 0, TARGET_TYPE_STRING }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 static guint dnd_n_targets = sizeof(dnd_target_table) / sizeof(dnd_target_table[0]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
96 static const struct memory_description gtk_frame_data_description_1 [] = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
97 { XD_LISP_OBJECT, offsetof (struct gtk_frame, icon_pixmap) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
98 { XD_LISP_OBJECT, offsetof (struct gtk_frame, icon_pixmap_mask) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
99 { XD_LISP_OBJECT_ARRAY, offsetof (struct gtk_frame, lisp_visible_widgets),
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
100 3 },
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
101 { XD_LISP_OBJECT, offsetof (struct gtk_frame, menubar_data) },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
102 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
103 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
104
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
105 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
106 DEFINE_LRECORD_IMPLEMENTATION ("gtk-frame", gtk_frame,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
107 1, /*dumpable-flag*/
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
108 0, 0, 0, 0, 0,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
109 gtk_frame_data_description_1,
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
110 Lisp_Gtk_Frame);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
111 #else /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
112 extern const struct sized_memory_description gtk_frame_data_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
113
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
114 const struct sized_memory_description gtk_frame_data_description = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
115 sizeof (struct gtk_frame), gtk_frame_data_description_1
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
116 };
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
117 #endif /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
118
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
120 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
121 /* helper functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
122 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
123
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
124 /* Return the Emacs frame-object which contains the given widget. */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
125 struct frame *
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
126 gtk_widget_to_frame (GtkWidget *w)
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
127 {
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
128 struct frame *f = NULL;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
129
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
130 for (; w; w = w->parent)
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
131 {
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
132 if ((f = (struct frame *) gtk_object_get_data (GTK_OBJECT (w),
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
133 GTK_DATA_FRAME_IDENTIFIER)))
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
134 return (f);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
135 }
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
136
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
137 return (selected_frame());
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
138 }
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
139
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
140
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141 /* Return the Emacs frame-object corresponding to an X window */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143 gtk_window_to_frame (struct device *d, GdkWindow *wdesc)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 Lisp_Object tail, frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 struct frame *f;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 /* This function was previously written to accept only a window argument
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 (and to loop over all devices looking for a matching window), but
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150 that is incorrect because window ID's are not unique across displays. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152 for (tail = DEVICE_FRAME_LIST (d); CONSP (tail); tail = XCDR (tail))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 frame = XCAR (tail);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
155 if (!FRAMEP (frame))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
156 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 f = XFRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 if (FRAME_GTK_P (f) && GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f)) == wdesc)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
159 return f;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
160 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
161 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
164 /* Like gtk_window_to_frame but also compares the window with the widget's
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
165 windows */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
166 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
167 gtk_any_window_to_frame (struct device *d, GdkWindow *w)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 do
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 Lisp_Object frmcons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
173 DEVICE_FRAME_LOOP (frmcons, d)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 struct frame *fr = XFRAME (XCAR (frmcons));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176 if ((w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_CONTAINER_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_MENUBAR_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
180 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
181 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (fr))))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
182 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183 return (fr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
184 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
185 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
186 w = gdk_window_get_parent (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
187 } while (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189 return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
190 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
191
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
192 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
193 gtk_any_widget_or_parent_to_frame (struct device *d, GtkWidget *widget)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
195 return (gtk_any_window_to_frame (d, GET_GTK_WIDGET_WINDOW (widget)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
198 struct device *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
199 gtk_any_window_to_device (GdkWindow *w)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
200 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201 struct device *d = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202 Lisp_Object devcons, concons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
203
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
204 DEVICE_LOOP_NO_BREAK (devcons, concons)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 d = XDEVICE (XCAR (devcons));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 if (!DEVICE_GTK_P (d)) continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
208 if (gtk_any_window_to_frame (d, w))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
209 return (d);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
210 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
211 return (NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
212 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
214 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215 decode_gtk_frame (Lisp_Object frame)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
216 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217 if (NILP (frame))
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
218 frame = wrap_frame (selected_frame ());
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
219 CHECK_LIVE_FRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220 /* this will also catch dead frames, but putting in the above check
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
221 results in a more useful error */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
222 CHECK_GTK_FRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
223 return XFRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
224 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
225
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
226
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
227 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
228 /* window-manager interactions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
229 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
230 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
231 gtk_frame_iconified_p (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
232 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
233 return (f->iconified);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
234 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
235
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
236
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
237 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
238 /* frame properties */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
239 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
240
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
241 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
242 gtk_frame_property (struct frame *f, Lisp_Object property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
243 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
244 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
245
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
246 if (EQ (Qleft, property) || EQ (Qtop, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
247 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
248 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
249 if (!GET_GTK_WIDGET_WINDOW(shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
250 return Qzero;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
251 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell), &x, &y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
252 if (EQ (Qleft, property)) return make_int (x);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
253 if (EQ (Qtop, property)) return make_int (y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
254 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
255 if (EQ (Qshell_widget, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
256 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
257 return (FRAME_GTK_LISP_WIDGETS (f)[0]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
258 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
259 if (EQ (Qcontainer_widget, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
260 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
261 return (FRAME_GTK_LISP_WIDGETS (f)[1]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
262 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
263 if (EQ (Qtext_widget, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
264 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
265 return (FRAME_GTK_LISP_WIDGETS (f)[2]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
266 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
267 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
268 if (EQ (Qwindow_id, property))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
269 return Fgtk_window_id (wrap_frame (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
270 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
271
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
272 return Qunbound;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
273 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
274
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
275 static int
3087
dbd2a866e38a [xemacs-hg @ 2005-11-22 11:24:40 by malcolmp]
malcolmp
parents: 2500
diff changeset
276 gtk_internal_frame_property_p (struct frame *UNUSED(f), Lisp_Object property)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
277 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
278 return EQ (property, Qleft)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
279 || EQ (property, Qtop)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
280 || EQ (Qshell_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
281 || EQ (Qcontainer_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
282 || EQ (Qtext_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
283 || EQ (property, Qwindow_id)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
284 || STRINGP (property);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
285 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
286
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
287 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
288 gtk_frame_properties (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
289 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
290 Lisp_Object props = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
291 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
292 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
293
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
294 props = cons3 (Qshell_widget, FRAME_GTK_LISP_WIDGETS (f)[0], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
295 props = cons3 (Qcontainer_widget, FRAME_GTK_LISP_WIDGETS (f)[1], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
296 props = cons3 (Qtext_widget, FRAME_GTK_LISP_WIDGETS (f)[2], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
297
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
298 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
299 props = cons3 (Qwindow_id, Fgtk_window_id (wrap_frame (f)), props);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
300 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
301
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
302 if (!GET_GTK_WIDGET_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
303 x = y = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
304 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
305 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell), &x, &y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
306
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
307 props = cons3 (Qtop, make_int (y), props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
308 props = cons3 (Qleft, make_int (x), props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
309
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
310 return props;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
311 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
312
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
313
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
314 /* Functions called only from `gtk_set_frame_properties' to set
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
315 individual properties. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
316
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
317 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
318 gtk_set_frame_text_value (struct frame *UNUSED (f), Ibyte *value,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
319 void (*func) (gpointer, gchar *),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
320 gpointer arg)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
321 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
322 gchar *the_text = (gchar *) value;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
323
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
324 /* Programmer fuckup or window is not realized yet. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
325 if (!func || !arg) return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
326
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
327 #ifdef MULE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
328 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
329 Ibyte *ptr;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
330
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
331 /* Optimize for common ASCII case */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
332 for (ptr = value; *ptr; ptr++)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
333 if (!byte_ascii_p (*ptr))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
334 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
335 char *tmp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
336 C_STRING_TO_EXTERNAL (value, tmp, Qctext);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
337 the_text = tmp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
338 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
339 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
340 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
341 #endif /* MULE */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
342
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
343 (*func) (arg, (gchar *) the_text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
344 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
345
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
346 static void
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
347 gtk_set_title_from_ibyte (struct frame *f, Ibyte *name)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
348 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
349 if (GTK_IS_WINDOW (FRAME_GTK_SHELL_WIDGET (f)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
350 gtk_set_frame_text_value (f, name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
351 (void (*)(gpointer, gchar *))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
352 gtk_window_set_title, FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
353 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
354
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
355 static void
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
356 gtk_set_icon_name_from_ibyte (struct frame *f, Ibyte *name)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
357 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
358 gtk_set_frame_text_value (f, name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
359 (void (*)(gpointer, gchar *))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
360 gdk_window_set_icon_name, FRAME_GTK_SHELL_WIDGET (f)->window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
361 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
362
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
363 /* Set the initial frame size as specified. This function is used
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
364 when the frame's widgets have not yet been realized.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
365 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
366 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
367 gtk_set_initial_frame_size (struct frame *f, int x, int y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
368 unsigned int w, unsigned int h)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
369 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
370 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
371 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
372
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
373 if (GTK_IS_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
374 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
375 GdkWindowHints geometry_mask = GDK_HINT_RESIZE_INC;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
376 /* Deal with the cell size */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
377 default_face_height_and_width (wrap_frame (f), &geometry.height_inc, &geometry.width_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
378
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
379 gtk_window_set_geometry_hints (GTK_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
380 FRAME_GTK_TEXT_WIDGET (f), &geometry, geometry_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
381 gdk_window_set_hints (GET_GTK_WIDGET_WINDOW (shell), x, y, 0, 0, 0, 0, GDK_HINT_POS);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
382 gtk_window_set_policy (GTK_WINDOW (shell), TRUE, TRUE, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
383 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
384
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
385 FRAME_HEIGHT (f) = h;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
386 FRAME_WIDTH (f) = w;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
387
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
388 change_frame_size (f, h, w, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
389 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
390 GtkRequisition req;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
391
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
392 gtk_widget_size_request (FRAME_GTK_SHELL_WIDGET (f), &req);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
393 gtk_widget_set_usize (FRAME_GTK_SHELL_WIDGET (f), req.width, req.height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
394 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
395 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
396
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
397 /* Report that a frame property of frame S is being set or changed.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
398 If the property is not specially recognized, do nothing.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
399 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
400
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
401 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
402 gtk_set_frame_properties (struct frame *f, Lisp_Object plist)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
403 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
404 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
405 gint width = 0, height = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
406 gboolean width_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
407 gboolean height_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
408 gboolean x_position_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
409 gboolean y_position_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
410 Lisp_Object tail;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
411
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
412 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
413 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
414 Lisp_Object prop = Fcar (tail);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
415 Lisp_Object val = Fcar (Fcdr (tail));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
416
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
417 if (SYMBOLP (prop))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
418 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
419 if (EQ (prop, Qfont))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
420 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
421 /* If the value is not a string we silently ignore it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
422 if (STRINGP (val))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
423 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
424 Lisp_Object frm, font_spec;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
425
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
426 frm = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
427 font_spec = Fget (Fget_face (Qdefault), Qfont, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
428
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
429 Fadd_spec_to_specifier (font_spec, val, frm, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
430 update_frame_face_values (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
431 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
432 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
433 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
434 else if (EQ (prop, Qwidth))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
435 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
436 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
437 width = XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
438 width_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
439 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
440 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
441 else if (EQ (prop, Qheight))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
442 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
443 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
444 height = XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
445 height_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
446 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
447 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
448 /* Further kludge the x/y. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
449 else if (EQ (prop, Qx))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
450 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
451 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
452 x = (gint) XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
453 x_position_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
454 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
455 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
456 else if (EQ (prop, Qy))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
457 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
458 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
459 y = (gint) XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
460 y_position_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
461 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
462 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
463 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
464 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
465
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
466 /* Kludge kludge kludge. We need to deal with the size and position
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
467 specially. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
468 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
469 int size_specified_p = width_specified_p || height_specified_p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
470 int position_specified_p = x_position_specified_p || y_position_specified_p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
471
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
472 if (!width_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
473 width = 80;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
474 if (!height_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
475 height = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
476
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
477 /* Kludge kludge kludge kludge. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
478 if (position_specified_p &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
479 (!x_position_specified_p || !y_position_specified_p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
480 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
481 gint dummy;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
482 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
483 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
484 (x_position_specified_p ? &dummy : &x),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
485 (y_position_specified_p ? &dummy : &y));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
486 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
487
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
488 if (!f->init_finished)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
489 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
490 if (size_specified_p || position_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
491 gtk_set_initial_frame_size (f, x, y, width, height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
492 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
493 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
494 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
495 if (size_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
496 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
497 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
498
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
499 Fset_frame_size (frame, make_int (width), make_int (height), Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
500 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
501 if (position_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
502 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
503 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
504
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
505 Fset_frame_position (frame, make_int (x), make_int (y));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
506 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
507 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
508 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
509 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
510
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
511
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
512 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
513 /* widget creation */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
514 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
515 /* Figure out what size the shell widget should initially be,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
516 and set it. Should be called after the default font has been
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
517 determined but before the widget has been realized. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
518
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
519 extern Lisp_Object Vgtk_initial_geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
520
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
521 #ifndef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
522 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
523 get_number (const char **geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
524 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
525 int value = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
526 int mult = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
527
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
528 if (**geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
529 mult = -1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
530 (*geometry)++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
531 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
532 while (**geometry && isdigit (**geometry)){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
533 value = value * 10 + (**geometry - '0');
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
534 (*geometry)++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
535 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
536 return value * mult;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
537 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
538
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
539 /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
540 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
541
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
542 /**
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
543 * gnome_parse_geometry
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
544 * @geometry: geometry string to be parsed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
545 * @xpos: X position geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
546 * @ypos: Y position geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
547 * @width: pixel width geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
548 * @height: pixel height geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
549 *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
550 * Description:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
551 * Parses the geometry string passed in @geometry, and fills
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
552 * @xpos, @ypos, @width, and @height with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
553 * the corresponding values upon completion of the parse.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
554 * If the parse fails, it should be assumed that @xpos, @ypos, @width,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
555 * and @height contain undefined values.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
556 *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
557 * Returns:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
558 * %TRUE if the geometry was successfully parsed, %FALSE otherwise.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
559 **/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
560
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
561 static gboolean
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
562 gnome_parse_geometry (const gchar *geometry, gint *xpos,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
563 gint *ypos, gint *width, gint *height)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
564 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
565 int subtract;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
566
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
567 g_return_val_if_fail (xpos != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
568 g_return_val_if_fail (ypos != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
569 g_return_val_if_fail (width != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
570 g_return_val_if_fail (height != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
571
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
572 *xpos = *ypos = *width = *height = -1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
573
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
574 if (!geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
575 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
576
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
577 if (*geometry == '=')
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
578 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
579 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
580 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
581 if (isdigit (*geometry))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
582 *width = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
583 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
584 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
585 if (*geometry == 'x' || *geometry == 'X'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
586 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
587 *height = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
588 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
589 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
590 return 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
591 if (*geometry == '+'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
592 subtract = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
593 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
594 } else if (*geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
595 subtract = gdk_screen_width ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
596 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
597 } else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
598 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
599 *xpos = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
600 if (subtract)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
601 *xpos = subtract - *xpos;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
602 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
603 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
604 if (*geometry == '+'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
605 subtract = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
606 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
607 } else if (*geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
608 subtract = gdk_screen_height ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
609 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
610 } else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
611 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
612 *ypos = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
613 if (subtract)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
614 *ypos = subtract - *ypos;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
615 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
616 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
617 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
618
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
619 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
620 gtk_initialize_frame_size (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
621 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
622 gint x = 10, y = 10, w = 80, h = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
623
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
624 if (STRINGP (Vgtk_initial_geometry))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
625 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
626 if (!gnome_parse_geometry ((char*) XSTRING_DATA (Vgtk_initial_geometry), &x,&y,&w,&h))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
627 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
628 x = y = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
629 w = 80;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
630 h = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
631 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
632 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
633
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
634 /* set the position of the frame's root window now. When the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
635 frame was created, the position was initialized to (0,0). */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
636 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
637 struct window *win = XWINDOW (f->root_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
638
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
639 WINDOW_LEFT (win) = FRAME_LEFT_BORDER_END (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
640 WINDOW_TOP (win) = FRAME_TOP_BORDER_END (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
641
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
642 if (!NILP (f->minibuffer_window))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
643 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
644 win = XWINDOW (f->minibuffer_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
645 WINDOW_LEFT (win) = FRAME_LEFT_BORDER_END (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
646 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
647 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
648
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
649 gtk_set_initial_frame_size (f, x, y, w, h);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
650 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
651
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
652 static gboolean
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
653 resize_event_cb (GtkWidget *UNUSED (w), GtkAllocation *allocation,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
654 gpointer user_data)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
655 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
656 struct frame *f = (struct frame *) user_data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
657
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
658 f->pixwidth = allocation->width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
659 f->pixheight = allocation->height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
660
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
661 if (FRAME_GTK_TEXT_WIDGET (f)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
662 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
663 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
664
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
665 Fredraw_frame (frame, Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
666 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
667
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
668 return (FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
669 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
670
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
671 static gboolean
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
672 delete_event_cb (GtkWidget *UNUSED (w), GdkEvent *UNUSED (ev),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
673 gpointer user_data)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
674 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
675 struct frame *f = (struct frame *) user_data;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
676 Lisp_Object frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
677
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
678 enqueue_misc_user_event (frame, Qeval, list3 (Qdelete_frame, frame, Qt));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
679
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
680 /* See if tickling the event queue helps us with our delays when
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
681 clicking 'close' */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
682 signal_fake_event ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
683
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
684 return (TRUE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
685 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
686
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
687 extern gboolean emacs_shell_event_handler (GtkWidget *wid, GdkEvent *event, gpointer closure);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
688 extern Lisp_Object build_gtk_object (GtkObject *obj);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
689
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
690 #ifndef GNOME_IS_APP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
691 #define GNOME_IS_APP(x) 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
692 #define gnome_app_set_contents(x,y) 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
693 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
694
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
695 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
696 cleanup_deleted_frame (gpointer data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
697 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
698 struct frame *f = (struct frame *) data;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
699 Lisp_Object frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
700
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
701 Fdelete_frame (frame, Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
702 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
703
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
704 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
705 extern void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
706 dragndrop_data_received (GtkWidget *widget,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
707 GdkDragContext *context,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
708 gint x,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
709 gint y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
710 GtkSelectionData *data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
711 guint info,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
712 guint time);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
713
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
714 extern gboolean
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
715 dragndrop_dropped (GtkWidget *widget,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
716 GdkDragContext *drag_context,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
717 gint x,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
718 gint y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
719 guint time,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
720 gpointer user_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
721
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
722 Lisp_Object Vcurrent_drag_object;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
723
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
724 #define DRAG_SELECTION_DATA_ERROR "Error converting drag data to external format"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
725 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
726 dragndrop_get_drag (GtkWidget *UNUSED (widget),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
727 GdkDragContext *UNUSED (drag_context),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
728 GtkSelectionData *data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
729 guint info,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
730 guint UNUSED (time),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
731 gpointer UNUSED (user_data))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
732 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
733 gtk_selection_data_set (data, GDK_SELECTION_TYPE_STRING, 8,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
734 DRAG_SELECTION_DATA_ERROR,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
735 strlen (DRAG_SELECTION_DATA_ERROR));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
736
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
737 switch (info)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
738 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
739 case TARGET_TYPE_STRING:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
740 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
741 Lisp_Object string = Vcurrent_drag_object;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
742
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
743 if (!STRINGP (Vcurrent_drag_object))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
744 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
745 string = Fprin1_to_string (string, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
746 /* Convert to a string */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
747 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
748
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
749 gtk_selection_data_set (data, GDK_SELECTION_TYPE_STRING,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
750 8, XSTRING_DATA (string), XSTRING_LENGTH (string));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
751 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
752 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
753 case TARGET_TYPE_URI_LIST:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
754 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
755 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
756 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
757 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
758 Vcurrent_drag_object = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
759 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
760
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
761 DEFUN ("gtk-start-drag-internal", Fgtk_start_drag_internal, 2, 3, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
762 Start a GTK drag from a buffer.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
763 First arg is the event that started the drag,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
764 second arg should be some string, and the third
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
765 is the type of the data (this should be a MIME type as a string (ie: text/plain)).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
766 The type defaults to text/plain.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
767 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
768 (event, data, dtyp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
769 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
770 if (EVENTP(event))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
771 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
772 struct frame *f = decode_gtk_frame (Fselected_frame (Qnil));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
773 GtkWidget *wid = FRAME_GTK_TEXT_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
774 struct Lisp_Event *lisp_event = XEVENT(event);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
775 GdkAtom dnd_typ;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
776 GtkTargetList *tl = gtk_target_list_new (dnd_target_table, dnd_n_targets);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
777
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
778 /* only drag if this is really a press */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
779 if (EVENT_TYPE(lisp_event) != button_press_event)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
780 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
781
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
782 /* get the desired type */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
783 if (!NILP (dtyp) && STRINGP (dtyp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
784 dnd_typ = gdk_atom_intern (XSTRING_DATA (dtyp), FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
785
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
786 gtk_drag_begin (wid, tl, GDK_ACTION_COPY,
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
787 EVENT_BUTTON_BUTTON (lisp_event), NULL);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
788
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
789 Vcurrent_drag_object = data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
790
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
791 gtk_target_list_unref (tl);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
792 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
793 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
794 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
795 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
796
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
797 /* Creates the widgets for a frame.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
798 lisp_window_id is a Lisp description of an X window or Xt
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
799 widget to parse.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
800
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
801 This function does not map the windows. (That is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
802 done by gtk_popup_frame().)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
803 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
804 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
805 gtk_create_widgets (struct frame *f, Lisp_Object lisp_window_id, Lisp_Object parent)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
806 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
807 const char *name;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
808 GtkWidget *text, *container, *shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
809 gboolean embedded_p = !NILP (lisp_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
810 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
811 int menubar_visible;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
812 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
813
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
814 if (STRINGP (f->name))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
815 TO_EXTERNAL_FORMAT (LISP_STRING, f->name, C_STRING_ALLOCA, name, Qctext);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
816 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
817 name = "emacs";
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
818
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
819 FRAME_GTK_TOP_LEVEL_FRAME_P (f) = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
820
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
821 if (embedded_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
822 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
823 CHECK_GTK_OBJECT (lisp_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
824
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
825 if (!GTK_IS_CONTAINER (XGTK_OBJECT (lisp_window_id)->object))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
826 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
827 invalid_argument ("Window ID must be a GtkContainer subclass", lisp_window_id);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
828 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
829
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
830 shell = gtk_vbox_new (FALSE, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
831
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
832 gtk_object_weakref (GTK_OBJECT (shell), cleanup_deleted_frame, f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
833 gtk_container_add (GTK_CONTAINER (XGTK_OBJECT (lisp_window_id)->object), shell);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
834 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
835 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
836 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
837 #ifdef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
838 shell = GTK_WIDGET (gnome_app_new ("XEmacs", "XEmacs/GNOME"));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
839 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
840 shell = GTK_WIDGET (gtk_window_new (GTK_WINDOW_TOPLEVEL));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
841 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
842 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
843
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
844 if (!NILP (parent))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
845 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
846 /* If this is a transient window, keep the parent info around */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
847 GtkWidget *parentwid = FRAME_GTK_SHELL_WIDGET (XFRAME (parent));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
848 gtk_object_set_data (GTK_OBJECT (shell), TRANSIENT_DATA_IDENTIFIER, parentwid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
849 gtk_window_set_transient_for (GTK_WINDOW (shell), GTK_WINDOW (parentwid));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
850 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
851
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
852 gtk_container_set_border_width (GTK_CONTAINER (shell), 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
853
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
854 /* Add a mapping from widget to frame to help widget callbacks quickly find
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
855 their corresponding frame. */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
856 gtk_object_set_data (GTK_OBJECT (shell), GTK_DATA_FRAME_IDENTIFIER, f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
857
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
858 FRAME_GTK_SHELL_WIDGET (f) = shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
859
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
860 text = GTK_WIDGET (gtk_xemacs_new (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
861
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
862 if (!GNOME_IS_APP (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
863 container = GTK_WIDGET (gtk_vbox_new (FALSE, INTERNAL_BORDER_WIDTH));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
864 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
865 container = shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
866
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
867 FRAME_GTK_CONTAINER_WIDGET (f) = container;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
868 FRAME_GTK_TEXT_WIDGET (f) = text;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
869
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
870 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
871 gtk_drag_dest_set (text, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
872 dnd_target_table, dnd_n_targets,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
873 GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
874 gtk_signal_connect (GTK_OBJECT (text), "drag_drop",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
875 GTK_SIGNAL_FUNC (dragndrop_dropped), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
876 gtk_signal_connect (GTK_OBJECT (text), "drag_data_received",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
877 GTK_SIGNAL_FUNC (dragndrop_data_received), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
878 gtk_signal_connect (GTK_OBJECT (text), "drag_data_get",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
879 GTK_SIGNAL_FUNC (dragndrop_get_drag), NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
880 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
881
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
882 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
883 /* Create the initial menubar widget. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
884 menubar_visible = gtk_initialize_frame_menubar (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
885
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
886 if (menubar_visible)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
887 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
888 gtk_widget_show_all (FRAME_GTK_MENUBAR_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
889 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
890 #endif /* HAVE_MENUBARS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
891
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
892 if (GNOME_IS_APP (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
893 gnome_app_set_contents (GNOME_APP (shell), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
894 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
895 /* Now comes the drawing area, which should fill the rest of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
896 ** frame completely.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
897 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
898 gtk_box_pack_end (GTK_BOX (container), text, TRUE, TRUE, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
899
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
900 /* Connect main event handler */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
901 gtk_signal_connect (GTK_OBJECT (shell), "delete-event", GTK_SIGNAL_FUNC (delete_event_cb), f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
902
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
903 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
904 static char *events_to_frob[] = { "focus-in-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
905 "focus-out-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
906 "enter-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
907 "leave-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
908 "map-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
909 "unmap-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
910 "property-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
911 "selection-clear-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
912 "selection-request-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
913 "selection-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
914 "client-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
915 /* "configure-event", */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
916 "visibility-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
917 NULL };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
918 int i;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
919
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
920 for (i = 0; events_to_frob[i]; i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
921 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
922 gtk_signal_connect (GTK_OBJECT (shell), events_to_frob[i],
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
923 GTK_SIGNAL_FUNC (emacs_shell_event_handler), f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
924 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
925 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
926
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
927 gtk_signal_connect (GTK_OBJECT (shell), "size-allocate", GTK_SIGNAL_FUNC (resize_event_cb), f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
928
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
929 /* This might be safe to call now... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
930 /* gtk_signal_connect (GTK_OBJECT (shell), "event", GTK_SIGNAL_FUNC (emacs_shell_event_handler), f); */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
931
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
932 /* Let's make sure we get all the events we can */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
933 gtk_widget_set_events (text, GDK_ALL_EVENTS_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
934
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
935 if (shell != container)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
936 gtk_container_add (GTK_CONTAINER (shell), container);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
937
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
938 gtk_widget_set_name (shell, "XEmacs::shell");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
939 gtk_widget_set_name (container, "XEmacs::container");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
940 gtk_widget_set_name (text, "XEmacs::text");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
941
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
942 FRAME_GTK_LISP_WIDGETS(f)[0] = build_gtk_object (GTK_OBJECT (shell));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
943 FRAME_GTK_LISP_WIDGETS(f)[1] = build_gtk_object (GTK_OBJECT (container));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
944 FRAME_GTK_LISP_WIDGETS(f)[2] = build_gtk_object (GTK_OBJECT (text));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
945
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
946 gtk_widget_realize (shell);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
947 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
948
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
949 /* create the windows for the specified frame and display them.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
950 Note that the widgets have already been created, and any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
951 necessary geometry calculations have already been done. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
952 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
953 gtk_popup_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
954 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
955 /* */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
956
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
957 if (gtk_object_get_data (GTK_OBJECT (FRAME_GTK_SHELL_WIDGET (f)), UNMAPPED_DATA_IDENTIFIER))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
958 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
959 FRAME_GTK_TOTALLY_VISIBLE_P (f) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
960 f->visible = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
961 gtk_widget_realize (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
962 gtk_widget_realize (FRAME_GTK_TEXT_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
963 gtk_widget_hide_all (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
964 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
965 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
966 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
967 gtk_widget_show_all (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
968 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
969 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
970
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
971 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
972 allocate_gtk_frame_struct (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
973 {
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
974 int i;
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
975
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
976 /* zero out all slots. */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
977 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
978 f->frame_data = alloc_lrecord_type (struct gtk_frame, &lrecord_gtk_frame);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
979 #else /* not NEW_GC */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
980 f->frame_data = xnew_and_zero (struct gtk_frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
981 #endif /* not NEW_GC */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
982
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
983 /* yeah, except the lisp ones */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
984 FRAME_GTK_ICON_PIXMAP (f) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
985 FRAME_GTK_ICON_PIXMAP_MASK (f) = Qnil;
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
986 FRAME_GTK_MENUBAR_DATA (f) = Qnil;
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
987 for (i = 0; i < 3; i++)
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
988 FRAME_GTK_LISP_WIDGETS (f)[i] = Qnil;
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
989
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
990 /*
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
991 Hashtables of callback data for glyphs on the frame. Make them EQ because
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
992 we only use ints as keys. Otherwise we run into stickiness in redisplay
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
993 because internal_equal() can QUIT. See enter_redisplay_critical_section().
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
994 */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
995 FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f) =
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
996 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
997 FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f) =
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
998 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
999 FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f) =
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1000 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1001 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1002
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1003
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1004 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1005 /* Lisp functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1006 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1007
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1008 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1009 gtk_init_frame_1 (struct frame *f, Lisp_Object props,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
1010 int UNUSED (frame_name_is_defaulted))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1011 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1012 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1013 Lisp_Object initially_unmapped;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1014 Lisp_Object device = FRAME_DEVICE (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1015 Lisp_Object lisp_window_id = Fplist_get (props, Qwindow_id, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1016 Lisp_Object popup = Fplist_get (props, Qpopup, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1017
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1018 if (!NILP (popup))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1019 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1020 if (EQ (popup, Qt))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1021 popup = Fselected_frame (device);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1022 CHECK_LIVE_FRAME (popup);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1023 if (!EQ (device, FRAME_DEVICE (XFRAME (popup))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1024 invalid_argument_2 ("Parent must be on same device as frame",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1025 device, popup);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1026 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1027
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1028 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1029
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1030 /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1031 * Previously we set this only if NILP (DEVICE_SELECTED_FRAME (d))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1032 * to make sure that messages were displayed as soon as possible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1033 * if we're creating the first frame on a device. But it is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1034 * better to just set this all the time, so that when a new frame
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1035 * is created that covers the selected frame, echo area status
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1036 * messages can still be seen. f->visible is reset later if the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1037 * initially-unmapped property is found to be non-nil in the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1038 * frame properties.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1039 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1040 f->visible = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1041
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1042 allocate_gtk_frame_struct (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1043 gtk_create_widgets (f, lisp_window_id, popup);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1044
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1045 if (!NILP (initially_unmapped))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1046 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1047 gtk_object_set_data (GTK_OBJECT (FRAME_GTK_SHELL_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1048 UNMAPPED_DATA_IDENTIFIER, (gpointer) 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1049 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1050 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1051
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1052 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
1053 gtk_init_frame_2 (struct frame *f, Lisp_Object UNUSED (props))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1054 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1055 /* Set up the values of the widget/frame. A case could be made for putting
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1056 this inside of the widget's initialize method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1057
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1058 update_frame_face_values (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1059 gtk_initialize_frame_size (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1060 /* Kyle:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1061 * update_frame_title() can't be done here, because some of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1062 * modeline specs depend on the frame's device having a selected
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1063 * frame, and that may not have been set up yet. The redisplay
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1064 * will update the frame title anyway, so nothing is lost.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1065 * JV:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1066 * It turns out it gives problems with FVWMs name based mapping.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1067 * We'll just need to be carefull in the modeline specs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1068 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1069 update_frame_title (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1070 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1071
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1072 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1073 gtk_init_frame_3 (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1074 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1075 /* Pop up the frame. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1076 gtk_popup_frame (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1077 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1078
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1079 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1080 gtk_mark_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1081 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1082 mark_object (FRAME_GTK_ICON_PIXMAP (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1083 mark_object (FRAME_GTK_ICON_PIXMAP_MASK (f));
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
1084 mark_object (FRAME_GTK_MENUBAR_DATA (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1085 mark_object (FRAME_GTK_LISP_WIDGETS (f)[0]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1086 mark_object (FRAME_GTK_LISP_WIDGETS (f)[1]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1087 mark_object (FRAME_GTK_LISP_WIDGETS (f)[2]);
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1088 mark_object (FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f));
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1089 mark_object (FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f));
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1090 mark_object (FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1091 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1092
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1093 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1094 gtk_set_frame_icon (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1095 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1096 GdkPixmap *gtk_pixmap = NULL, *gtk_mask = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1097
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1098 if (IMAGE_INSTANCEP (f->icon)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1099 && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (f->icon)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1100 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1101 gtk_pixmap = XIMAGE_INSTANCE_GTK_PIXMAP (f->icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1102 gtk_mask = XIMAGE_INSTANCE_GTK_MASK (f->icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1103 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1104 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1105 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1106 gtk_pixmap = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1107 gtk_mask = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1108 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1109
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1110 gdk_window_set_icon (GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f)), NULL, gtk_pixmap, gtk_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1111 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1112
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1113 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1114 gtk_set_frame_pointer (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1115 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1116 GtkWidget *w = FRAME_GTK_TEXT_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1117 GdkCursor *c = XIMAGE_INSTANCE_GTK_CURSOR (f->pointer);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1118
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1119 if (POINTER_IMAGE_INSTANCEP (f->pointer))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1120 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1121 gdk_window_set_cursor (GET_GTK_WIDGET_WINDOW (w), c);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1122 gdk_flush ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1123 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1124 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1125 {
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
1126 /* ABORT()? */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1127 stderr_out ("POINTER_IMAGE_INSTANCEP (f->pointer) failed!\n");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1128 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1129 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1130
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1131 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1132 gtk_get_frame_parent (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1133 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1134 GtkWidget *parentwid = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (FRAME_GTK_SHELL_WIDGET (f)),
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1135 TRANSIENT_DATA_IDENTIFIER);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1136
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1137 /* find the frame whose wid is parentwid */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1138 if (parentwid)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1139 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1140 Lisp_Object frmcons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1141 DEVICE_FRAME_LOOP (frmcons, XDEVICE (FRAME_DEVICE (f)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1142 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1143 Lisp_Object frame = XCAR (frmcons);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1144 if (FRAME_GTK_SHELL_WIDGET (XFRAME (frame)) == parentwid)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1145 return frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1146 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1147 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1148 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1149 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1150
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1151 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1152 DEFUN ("gtk-window-id", Fgtk_window_id, 0, 1, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1153 Get the ID of the Gtk window.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1154 This gives us a chance to manipulate the Emacs window from within a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1155 different program. Since the ID is an unsigned long, we return it as
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1156 a string.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1157 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1158 (frame))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1159 {
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
1160 Ascbyte str[255];
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1161 struct frame *f = decode_gtk_frame (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1162
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1163 /* Arrrrggghhh... this defeats the whole purpose of using Gdk... do we really need this? */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1164 sprintf (str, "%lu", GDK_WINDOW_XWINDOW( GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f))));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
1165 return build_ascstring (str);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1166 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1167 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1168
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1169
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1170 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1171 /* manipulating the X window */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1172 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1173
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1174 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1175 gtk_set_frame_position (struct frame *f, int xoff, int yoff)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1176 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1177 gtk_widget_set_uposition (FRAME_GTK_SHELL_WIDGET (f), xoff, yoff);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1178 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1179
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1180 /* Call this to change the size of frame S's x-window. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1181
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1182 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1183 gtk_set_frame_size (struct frame *f, int cols, int rows)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1184 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1185 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1186 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1187
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1188 if (GTK_IS_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1189 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1190 GdkWindowHints geometry_mask = GDK_HINT_RESIZE_INC;
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1191
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1192 /* Update the cell size */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1193 default_face_height_and_width (wrap_frame (f), &geometry.height_inc, &geometry.width_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1194
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1195 gtk_window_set_geometry_hints (GTK_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1196 FRAME_GTK_TEXT_WIDGET (f), &geometry, geometry_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1197 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1198
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1199 change_frame_size (f, rows, cols, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1200
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1201 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1202 GtkRequisition req;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1203
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1204 gtk_widget_size_request (FRAME_GTK_SHELL_WIDGET (f), &req);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1205 gtk_widget_set_usize (FRAME_GTK_SHELL_WIDGET (f), req.width, req.height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1206 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1207 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1208
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1209 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1210 /* There is NO equivalent to XWarpPointer under Gtk */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1211 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1212 gtk_set_mouse_position (struct window *w, int x, int y)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1213 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1214 struct frame *f = XFRAME (w->frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1215 Display *display = GDK_DISPLAY ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1216 XWarpPointer (display, None,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1217 GDK_WINDOW_XWINDOW (GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f))),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1218 0, 0, 0, 0, w->pixel_left + x, w->pixel_top + y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1219 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1220 #endif /* STUPID_X_SPECIFIC_GTK_STUFF */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1221
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1222 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1223 gtk_get_mouse_position (struct device *d, Lisp_Object *frame, int *x, int *y)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1224 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1225 /* Returns the pixel position within the editor text widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1226 gint win_x, win_y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1227 GdkWindow *w = gdk_window_at_pointer (&win_x, &win_y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1228 struct frame *f = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1229
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1230 if (!w) return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1231
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1232 /* At this point, w is the innermost GdkWindow containing the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1233 ** pointer and win_x and win_y are the coordinates of that window.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1234 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1235 f = gtk_any_window_to_frame (d, w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1236
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1237 if (!f) return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1238
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1239 *frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1240
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1241 gdk_window_get_pointer (GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1242 &win_x, &win_y, NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1243
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1244 *x = win_x;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1245 *y = win_y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1246
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1247 return (1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1248 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1249
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1250 static DECLARE_DOESNT_RETURN (gtk_cant_notify_wm_error (void));
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1251
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1252 static DOESNT_RETURN
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1253 gtk_cant_notify_wm_error ()
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1254 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1255 signal_error (Qgui_error, "Can't notify window manager of iconification", Qunbound);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1256 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1257
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1258 /* Raise frame F. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1259 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1260 gtk_raise_frame_1 (struct frame *f, int force)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1261 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1262 if (FRAME_VISIBLE_P (f) || force)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1263 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1264 GdkWindow *emacs_window = GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1265
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1266 gdk_window_raise (emacs_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1267 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1268 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1269
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1270 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1271 gtk_raise_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1272 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1273 gtk_raise_frame_1 (f, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1274 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1275
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1276 /* Lower frame F. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1277 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1278 gtk_lower_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1279 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1280 if (FRAME_VISIBLE_P (f))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1281 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1282 gdk_window_lower (GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1283 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1284 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1285
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1286 /* Change from withdrawn state to mapped state. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1287 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1288 gtk_make_frame_visible (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1289 {
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
1290 gtk_widget_map (FRAME_GTK_SHELL_WIDGET (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1291 gtk_raise_frame_1 (f, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1292 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1293
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1294 /* Change from mapped state to withdrawn state. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1295 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1296 gtk_make_frame_invisible (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1297 {
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
1298 gtk_widget_unmap(FRAME_GTK_SHELL_WIDGET (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1299 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1300
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1301 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1302 gtk_frame_visible_p (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1303 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1304 GtkWidget *w = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1305
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1306 f->visible = (GTK_OBJECT_FLAGS (w) & GTK_VISIBLE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1307
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1308 return f->visible;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1309 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1310
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1311 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1312 gtk_frame_totally_visible_p (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1313 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1314 return FRAME_GTK_TOTALLY_VISIBLE_P (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1315 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1316
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1317 /* Change window state from mapped to iconified. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1318 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1319 gtk_iconify_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1320 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1321 GdkWindow *w = GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1322
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1323 /* There is no equivalent to XIconifyWindow in Gtk/Gdk. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1324 if (!XIconifyWindow (GDK_WINDOW_XDISPLAY (w),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1325 GDK_WINDOW_XWINDOW (w),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1326 DefaultScreen (GDK_WINDOW_XDISPLAY (w))))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1327 gtk_cant_notify_wm_error ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1328
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1329 f->iconified = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1330 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1331
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1332 /* Sets the X focus to frame f. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1333 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1334 gtk_focus_on_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1335 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1336 GtkWidget *shell_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1337
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1338 assert (FRAME_GTK_P (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1339
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1340 shell_widget = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1341 if (!GET_GTK_WIDGET_WINDOW (shell_widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1342 return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1343
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1344 gtk_widget_grab_focus (shell_widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1345 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1346
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1347 /* Destroy the window of frame S. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1348 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1349 gtk_delete_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1350 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1351 GtkWidget *w = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1352
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1353 gtk_widget_destroy (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1354
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1355 if (FRAME_GTK_GEOM_FREE_ME_PLEASE (f))
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1356 xfree (FRAME_GTK_GEOM_FREE_ME_PLEASE (f), char *);
4117
229bd619740a [xemacs-hg @ 2007-08-15 11:06:02 by crestani]
crestani
parents: 3676
diff changeset
1357 #ifndef NEW_GC
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1358 xfree (f->frame_data, void *);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1359 #endif /* not NEW_GC */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1360 f->frame_data = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1361 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1362
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1363 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1364 gtk_recompute_cell_sizes (struct frame *frm)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1365 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1366 if (GTK_IS_WINDOW (FRAME_GTK_SHELL_WIDGET (frm)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1367 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1368 GtkWindow *w = GTK_WINDOW (FRAME_GTK_SHELL_WIDGET (frm));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1369 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1370 GdkWindowHints geometry_mask;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1371 gint width_inc = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1372 gint height_inc = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1373
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1374 default_face_height_and_width (wrap_frame (frm), &height_inc, &width_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1375 geometry_mask = GDK_HINT_RESIZE_INC;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1376 geometry.width_inc = width_inc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1377 geometry.height_inc = height_inc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1378
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1379 gtk_window_set_geometry_hints (w, FRAME_GTK_TEXT_WIDGET (frm), &geometry, geometry_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1380 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1381 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1382
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1383 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1384 gtk_update_frame_external_traits (struct frame* frm, Lisp_Object name)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1385 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1386 Lisp_Object frame = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1387
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1388 frame = wrap_frame (frm);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1389
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1390 if (EQ (name, Qforeground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1391 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1392 Lisp_Object color = FACE_FOREGROUND (Vdefault_face, frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1393 GdkColor *fgc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1394
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1395 if (!EQ (color, Vthe_null_color_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1396 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1397 fgc = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (color));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1398 /* #### BILL!!! The X code set the XtNforeground property of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1399 the text widget here. Why did they bother? All that type
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1400 of thing is done down in the guts of the redisplay code,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1401 not in the Emacs* widgets. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1402 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1403 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1404 else if (EQ (name, Qbackground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1405 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1406 Lisp_Object color = FACE_BACKGROUND (Vdefault_face, frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1407 GdkColor *bgc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1408
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1409 if (!EQ (color, Vthe_null_color_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1410 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1411 bgc = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (color));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1412 if (FRAME_GTK_SHELL_WIDGET (frm)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1413 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1414 gdk_window_set_background (FRAME_GTK_SHELL_WIDGET (frm)->window, bgc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1415 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1416 if (FRAME_GTK_TEXT_WIDGET (frm)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1417 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1418 gdk_window_set_background (FRAME_GTK_TEXT_WIDGET (frm)->window, bgc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1419 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1420 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1421
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1422 /* Really crappy way to force the modeline shadows to be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1423 redrawn. But effective. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1424 MARK_FRAME_WINDOWS_STRUCTURE_CHANGED (frm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1425 MARK_FRAME_CHANGED (frm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1426 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1427 else if (EQ (name, Qfont))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1428 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1429 Lisp_Object font = FACE_FONT (Vdefault_face, frame, Vcharset_ascii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1430
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1431 /* It may be that instantiating the font has deleted the frame (will
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1432 happen if the user has specified a charset registry for ASCII that
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1433 isn't available on the server, and our fallback of iso8859-1 isn't
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1434 available; something vanishingly rare.) In that case, return from
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1435 this function. */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1436
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1437 if (!FRAME_LIVE_P(frm))
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1438 {
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1439 return;
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1440 }
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1441
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1442 if (!EQ (font, Vthe_null_font_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1443 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1444 /* #### BILL!!! The X code set the XtNfont property of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1445 text widget here. Why did they bother? All that type of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1446 thing is done down in the guts of the redisplay code, not
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1447 in the Emacs* widgets. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1448 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1449 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1450 else
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
1451 ABORT ();
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1452
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1453 #ifdef HAVE_TOOLBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1454 /* Setting the background clears the entire frame area
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1455 including the toolbar so we force an immediate redraw of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1456 it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1457 if (EQ (name, Qbackground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1458 MAYBE_DEVMETH (XDEVICE (frm->device), redraw_frame_toolbars, (frm));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1459 #endif /* HAVE_TOOLBARS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1460
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1461 /* Set window manager resize increment hints according to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1462 the new character size */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1463 if (EQ (name, Qfont) && FRAME_GTK_TOP_LEVEL_FRAME_P (frm))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1464 gtk_recompute_cell_sizes (frm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1465 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1466
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1467
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1468 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1469 /* initialization */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1470 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1471
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1472 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1473 syms_of_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1474 {
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1475 #ifdef NEW_GC
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1476 INIT_LRECORD_IMPLEMENTATION (gtk_frame);
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1477 #endif /* NEW_GC */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1478
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1479 DEFSYMBOL (Qtext_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1480 DEFSYMBOL (Qcontainer_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1481 DEFSYMBOL (Qshell_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1482 DEFSYMBOL (Qdetachable_menubar);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1483
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1484 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1485 staticpro (&Vcurrent_drag_object);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1486 Vcurrent_drag_object = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1487 DEFSUBR (Fgtk_start_drag_internal);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1488 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1489 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1490 DEFSUBR (Fgtk_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1491 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1492 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1493
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1494 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1495 console_type_create_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1496 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1497 /* frame methods */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1498 CONSOLE_HAS_METHOD (gtk, init_frame_1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1499 CONSOLE_HAS_METHOD (gtk, init_frame_2);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1500 CONSOLE_HAS_METHOD (gtk, init_frame_3);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1501 CONSOLE_HAS_METHOD (gtk, mark_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1502 CONSOLE_HAS_METHOD (gtk, focus_on_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1503 CONSOLE_HAS_METHOD (gtk, delete_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1504 CONSOLE_HAS_METHOD (gtk, get_mouse_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1505 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1506 CONSOLE_HAS_METHOD (gtk, set_mouse_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1507 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1508 CONSOLE_HAS_METHOD (gtk, raise_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1509 CONSOLE_HAS_METHOD (gtk, lower_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1510 CONSOLE_HAS_METHOD (gtk, make_frame_visible);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1511 CONSOLE_HAS_METHOD (gtk, make_frame_invisible);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1512 CONSOLE_HAS_METHOD (gtk, iconify_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1513 CONSOLE_HAS_METHOD (gtk, set_frame_size);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1514 CONSOLE_HAS_METHOD (gtk, set_frame_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1515 CONSOLE_HAS_METHOD (gtk, frame_property);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1516 CONSOLE_HAS_METHOD (gtk, internal_frame_property_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1517 CONSOLE_HAS_METHOD (gtk, frame_properties);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1518 CONSOLE_HAS_METHOD (gtk, set_frame_properties);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
1519 CONSOLE_HAS_METHOD (gtk, set_title_from_ibyte);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
1520 CONSOLE_HAS_METHOD (gtk, set_icon_name_from_ibyte);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1521 CONSOLE_HAS_METHOD (gtk, frame_visible_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1522 CONSOLE_HAS_METHOD (gtk, frame_totally_visible_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1523 CONSOLE_HAS_METHOD (gtk, frame_iconified_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1524 CONSOLE_HAS_METHOD (gtk, set_frame_pointer);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1525 CONSOLE_HAS_METHOD (gtk, set_frame_icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1526 CONSOLE_HAS_METHOD (gtk, get_frame_parent);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1527 CONSOLE_HAS_METHOD (gtk, update_frame_external_traits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1528 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1529
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1530 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1531 vars_of_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1532 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1533 DEFVAR_LISP ("default-gtk-frame-plist", &Vdefault_gtk_frame_plist /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1534 Plist of default frame-creation properties for Gtk frames.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1535 These override what is specified in the resource database and in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1536 `default-frame-plist', but are overridden by the arguments to the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1537 particular call to `make-frame'.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1538
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1539 Note: In many cases, properties of a frame are available as specifiers
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1540 instead of through the frame-properties mechanism.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1541
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1542 Here is a list of recognized frame properties, other than those
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1543 documented in `set-frame-properties' (they can be queried and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1544 set at any time, except as otherwise noted):
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1545
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1546 initially-unmapped If non-nil, the frame will not be visible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1547 when it is created. In this case, you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1548 need to call `make-frame-visible' to make
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1549 the frame appear.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1550 popup If non-nil, it should be a frame, and this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1551 frame will be created as a "popup" frame
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1552 whose parent is the given frame. This
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1553 will make the window manager treat the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1554 frame as a dialog box, which may entail
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1555 doing different things (e.g. not asking
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1556 for positioning, and not iconifying
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1557 separate from its parent).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1558 inter-line-space Not currently implemented.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1559 toolbar-shadow-thickness Thickness of toolbar shadows.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1560 background-toolbar-color Color of toolbar background.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1561 bottom-toolbar-shadow-color Color of bottom shadows on toolbars.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1562 (*Not* specific to the bottom-toolbar.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1563 top-toolbar-shadow-color Color of top shadows on toolbars.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1564 (*Not* specific to the top-toolbar.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1565 internal-border-width Width of internal border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1566 border-width Width of external border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1567 top Y position (in pixels) of the upper-left
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1568 outermost corner of the frame (i.e. the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1569 upper-left of the window-manager
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1570 decorations).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1571 left X position (in pixels) of the upper-left
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1572 outermost corner of the frame (i.e. the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1573 upper-left of the window-manager
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1574 decorations).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1575 border-color Color of external border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1576 cursor-color Color of text cursor.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1577
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1578 See also `default-frame-plist', which specifies properties which apply
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1579 to all frames, not just Gtk frames.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1580 */ );
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1581 Vdefault_gtk_frame_plist = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1582
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1583 gtk_console_methods->device_specific_frame_props = &Vdefault_gtk_frame_plist;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1584 }