Compare commits
	
		
			2 Commits
		
	
	
		
			citadel-45
			...
			wip/gbsnet
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 66910ab422 | ||
|   | 17b56e9604 | 
| @@ -1456,6 +1456,14 @@ meta_compositor_hide_tile_preview (MetaCompositor *compositor) | ||||
|   meta_plugin_manager_hide_tile_preview (compositor->plugin_mgr); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_show_tile_picker (MetaCompositor *compositor, | ||||
|                                   MetaWindow     *window, | ||||
|                                   int             tile_monitor_number) | ||||
| { | ||||
|   meta_plugin_manager_show_tile_picker (compositor->plugin_mgr, window, tile_monitor_number); | ||||
| } | ||||
|  | ||||
| void | ||||
| meta_compositor_show_window_menu (MetaCompositor     *compositor, | ||||
|                                   MetaWindow         *window, | ||||
|   | ||||
| @@ -404,3 +404,24 @@ meta_plugin_manager_create_inhibit_shortcuts_dialog (MetaPluginManager *plugin_m | ||||
|  | ||||
|   return meta_inhibit_shortcuts_dialog_default_new (window); | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| meta_plugin_manager_show_tile_picker (MetaPluginManager *plugin_mgr, | ||||
|                                       MetaWindow        *window, | ||||
|                                       int                tile_monitor_number) | ||||
| { | ||||
|   MetaPlugin *plugin = plugin_mgr->plugin; | ||||
|   MetaPluginClass *klass = META_PLUGIN_GET_CLASS (plugin); | ||||
|   MetaDisplay *display = plugin_mgr->compositor->display; | ||||
|  | ||||
|   if (display->display_opening) | ||||
|     return FALSE; | ||||
|  | ||||
|   if (klass->show_tile_picker) | ||||
|     { | ||||
|       klass->show_tile_picker (plugin, window, tile_monitor_number); | ||||
|       return TRUE; | ||||
|     } | ||||
|  | ||||
|   return FALSE; | ||||
| } | ||||
|   | ||||
| @@ -98,4 +98,9 @@ MetaInhibitShortcutsDialog * | ||||
|   meta_plugin_manager_create_inhibit_shortcuts_dialog (MetaPluginManager *plugin_mgr, | ||||
|                                                        MetaWindow        *window); | ||||
|  | ||||
| gboolean meta_plugin_manager_show_tile_picker (MetaPluginManager *plugin_mgr, | ||||
|                                                MetaWindow        *window, | ||||
|                                                int                tile_monitor_number); | ||||
|  | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -74,13 +74,6 @@ typedef enum { | ||||
|  */ | ||||
| #define N_IGNORED_CROSSING_SERIALS  10 | ||||
|  | ||||
| typedef enum { | ||||
|   META_TILE_NONE, | ||||
|   META_TILE_LEFT, | ||||
|   META_TILE_RIGHT, | ||||
|   META_TILE_MAXIMIZED | ||||
| } MetaTileMode; | ||||
|  | ||||
| typedef enum { | ||||
|   /* Normal interaction where you're interacting with windows. | ||||
|    * Events go to windows normally. */ | ||||
|   | ||||
| @@ -593,8 +593,6 @@ void        meta_window_unmanage           (MetaWindow  *window, | ||||
|                                             guint32      timestamp); | ||||
| void        meta_window_queue              (MetaWindow  *window, | ||||
|                                             guint queuebits); | ||||
| void        meta_window_tile               (MetaWindow        *window, | ||||
|                                             MetaTileMode       mode); | ||||
| void        meta_window_restore_tile       (MetaWindow        *window, | ||||
|                                             MetaTileMode       mode, | ||||
|                                             int                width, | ||||
| @@ -712,7 +710,6 @@ void meta_window_update_for_monitors_changed (MetaWindow *window); | ||||
| void meta_window_on_all_workspaces_changed (MetaWindow *window); | ||||
|  | ||||
| gboolean meta_window_should_attach_to_parent (MetaWindow *window); | ||||
| gboolean meta_window_can_tile_side_by_side   (MetaWindow *window); | ||||
|  | ||||
| void meta_window_compute_tile_match (MetaWindow *window); | ||||
|  | ||||
|   | ||||
| @@ -179,6 +179,7 @@ enum { | ||||
|   PROP_GTK_APP_MENU_OBJECT_PATH, | ||||
|   PROP_GTK_MENUBAR_OBJECT_PATH, | ||||
|   PROP_ON_ALL_WORKSPACES, | ||||
|   PROP_TILE_MODE, | ||||
|  | ||||
|   LAST_PROP, | ||||
| }; | ||||
| @@ -399,6 +400,9 @@ meta_window_get_property(GObject         *object, | ||||
|     case PROP_ON_ALL_WORKSPACES: | ||||
|       g_value_set_boolean (value, win->on_all_workspaces); | ||||
|       break; | ||||
|     case PROP_TILE_MODE: | ||||
|       g_value_set_enum (value, win->tile_mode); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
| @@ -413,6 +417,9 @@ meta_window_set_property(GObject         *object, | ||||
| { | ||||
|   switch (prop_id) | ||||
|     { | ||||
|     case PROP_TILE_MODE: | ||||
|       meta_window_tile (META_WINDOW (object), g_value_get_enum (value)); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
| @@ -588,6 +595,13 @@ meta_window_class_init (MetaWindowClass *klass) | ||||
|                           "Whether the window is set to appear on all workspaces", | ||||
|                           FALSE, | ||||
|                           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); | ||||
|   obj_props[PROP_TILE_MODE] = | ||||
|     g_param_spec_enum ("tile-mode", | ||||
|                        "Tile mode", | ||||
|                        "The tile state of the window", | ||||
|                        META_TYPE_TILE_MODE, | ||||
|                        META_TILE_NONE, | ||||
|                        G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); | ||||
|  | ||||
|   g_object_class_install_properties (object_class, LAST_PROP, obj_props); | ||||
|  | ||||
| @@ -2833,6 +2847,7 @@ meta_window_maximize (MetaWindow        *window, | ||||
|  | ||||
|           window->maximized_vertically = FALSE; | ||||
|           window->tile_mode = META_TILE_NONE; | ||||
|           g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_TILE_MODE]); | ||||
|         } | ||||
|  | ||||
|       meta_window_maximize_internal (window, | ||||
| @@ -3085,19 +3100,30 @@ update_edge_constraints (MetaWindow *window) | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * meta_window_tile: | ||||
|  * @window: a #MetaWindow | ||||
|  * @tile_mode: the new #MetaTileMode | ||||
|  * | ||||
|  * Tiles @window according to @tile_mode. | ||||
|  */ | ||||
| void | ||||
| meta_window_tile (MetaWindow   *window, | ||||
|                   MetaTileMode  tile_mode) | ||||
| { | ||||
|   MetaMaximizeFlags directions; | ||||
|   MetaRectangle old_frame_rect, old_buffer_rect; | ||||
|   gboolean should_notify; | ||||
|  | ||||
|   should_notify = window->tile_mode != tile_mode; | ||||
|  | ||||
|   meta_window_get_tile_fraction (window, tile_mode, &window->tile_hfraction); | ||||
|   window->tile_mode = tile_mode; | ||||
|  | ||||
|   /* Don't do anything if no tiling is requested */ | ||||
|   if (window->tile_mode == META_TILE_NONE) | ||||
|     return; | ||||
|     goto out; | ||||
|  | ||||
|   if (window->tile_mode == META_TILE_MAXIMIZED) | ||||
|     directions = META_MAXIMIZE_BOTH; | ||||
| @@ -3126,6 +3152,16 @@ meta_window_tile (MetaWindow   *window, | ||||
|  | ||||
|   if (window->frame) | ||||
|     meta_frame_queue_draw (window->frame); | ||||
|  | ||||
|   /* If the window doesn't have a tile match after being tiled, ask the | ||||
|    * compositor to show the tile picker. | ||||
|    */ | ||||
|   if (META_WINDOW_TILED_SIDE_BY_SIDE (window) && !window->tile_match) | ||||
|     meta_compositor_show_tile_picker (window->display->compositor, window, window->monitor->number); | ||||
|  | ||||
| out: | ||||
|   if (should_notify) | ||||
|     g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_TILE_MODE]); | ||||
| } | ||||
|  | ||||
| void | ||||
| @@ -3144,6 +3180,15 @@ meta_window_can_tile_maximized (MetaWindow *window) | ||||
|   return window->has_maximize_func; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_window_can_tile_side_by_side: | ||||
|  * @window: a #MetaWindow | ||||
|  * | ||||
|  * Retrieves whether @window can be tiled horizontally. | ||||
|  * | ||||
|  * Returns: %TRUE if @window can be tiled horizontally, %FALSE | ||||
|  * otherwise. | ||||
|  */ | ||||
| gboolean | ||||
| meta_window_can_tile_side_by_side (MetaWindow *window) | ||||
| { | ||||
| @@ -3169,6 +3214,20 @@ meta_window_can_tile_side_by_side (MetaWindow *window) | ||||
|          client_rect.height >= window->size_hints.min_height; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * meta_window_get_tile_mode: | ||||
|  * @window: a #MetaWindow | ||||
|  * | ||||
|  * Retrieves the current tile mode of @window. | ||||
|  * | ||||
|  * Returns: a #MetaTileMode enum value | ||||
|  */ | ||||
| MetaTileMode | ||||
| meta_window_get_tile_mode (MetaWindow *window) | ||||
| { | ||||
|   return window->tile_mode; | ||||
| } | ||||
|  | ||||
| static void | ||||
| unmaximize_window_before_freeing (MetaWindow        *window) | ||||
| { | ||||
| @@ -3237,7 +3296,10 @@ meta_window_unmaximize (MetaWindow        *window, | ||||
|       meta_window_get_buffer_rect (window, &old_buffer_rect); | ||||
|  | ||||
|       if (unmaximize_vertically) | ||||
|         window->tile_mode = META_TILE_NONE; | ||||
|         { | ||||
|           window->tile_mode = META_TILE_NONE; | ||||
|           g_object_notify_by_pspec (G_OBJECT (window), obj_props[PROP_TILE_MODE]); | ||||
|         } | ||||
|  | ||||
|       meta_topic (META_DEBUG_WINDOW_OPS, | ||||
|                   "Unmaximizing %s%s\n", | ||||
|   | ||||
| @@ -122,6 +122,10 @@ void meta_compositor_show_tile_preview (MetaCompositor *compositor, | ||||
|                                         MetaRectangle  *tile_rect, | ||||
|                                         int             tile_monitor_number); | ||||
| void meta_compositor_hide_tile_preview (MetaCompositor *compositor); | ||||
| void meta_compositor_show_tile_picker  (MetaCompositor *compositor, | ||||
|                                         MetaWindow     *window, | ||||
|                                         int             tile_monitor_number); | ||||
|  | ||||
| void meta_compositor_show_window_menu (MetaCompositor     *compositor, | ||||
|                                        MetaWindow         *window, | ||||
| 				       MetaWindowMenuType  menu, | ||||
|   | ||||
| @@ -251,6 +251,14 @@ struct _MetaPluginClass | ||||
|    */ | ||||
|   MetaInhibitShortcutsDialog * (* create_inhibit_shortcuts_dialog) (MetaPlugin *plugin, | ||||
|                                                                     MetaWindow *window); | ||||
|  | ||||
|   /** | ||||
|    * MetaPluginClass::show_tile_picker: | ||||
|    * | ||||
|    */ | ||||
|   void * (* show_tile_picker) (MetaPlugin *plugin, | ||||
|                                MetaWindow *window, | ||||
|                                int         tile_monitor_number); | ||||
| }; | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -91,6 +91,21 @@ typedef enum { | ||||
|   META_WINDOW_CLIENT_TYPE_X11 | ||||
| } MetaWindowClientType; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * MetaTileMode: | ||||
|  * @META_TILE_NONE: the window is not tiled | ||||
|  * @META_TILE_LEFT: the window is tiled at the left side of the monitor | ||||
|  * @META_TILE_RIGHT: the window is tiled at the right side of the monitor | ||||
|  * @META_TILE_MAXIMIZED: the window is maximized (i.e. both left and right sides) | ||||
|  */ | ||||
| typedef enum { | ||||
|   META_TILE_NONE, | ||||
|   META_TILE_LEFT, | ||||
|   META_TILE_RIGHT, | ||||
|   META_TILE_MAXIMIZED | ||||
| } MetaTileMode; | ||||
|  | ||||
| #define META_TYPE_WINDOW            (meta_window_get_type ()) | ||||
| #define META_WINDOW(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), META_TYPE_WINDOW, MetaWindow)) | ||||
| #define META_WINDOW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  META_TYPE_WINDOW, MetaWindowClass)) | ||||
| @@ -260,4 +275,10 @@ gboolean meta_window_is_client_decorated (MetaWindow *window); | ||||
| gboolean meta_window_titlebar_is_onscreen    (MetaWindow *window); | ||||
| void     meta_window_shove_titlebar_onscreen (MetaWindow *window); | ||||
|  | ||||
| gboolean     meta_window_can_tile_side_by_side (MetaWindow   *window); | ||||
| MetaTileMode meta_window_get_tile_mode         (MetaWindow   *window); | ||||
| void         meta_window_tile                  (MetaWindow   *window, | ||||
|                                                 MetaTileMode  mode); | ||||
|  | ||||
|  | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user