⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mixgtk_wm.c

📁 汇编语言编程源代码
💻 C
字号:
/* -*-c-*- -------------- mixgtk_wm.c : * Implementation of the functions declared in mixgtk_wm.h * ------------------------------------------------------------------ * $Id: mixgtk_wm.c,v 1.6 2002/03/29 16:30:49 jao Exp $ * ------------------------------------------------------------------ * Copyright (C) 2001, 2002 Free Software Foundation, Inc. *   * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. *   * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *   * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *   */#include <string.h>#include "mixgtk_widgets.h"#include "mixgtk_config.h"#include "mixgtk_wm.h"typedef struct window_info_t_{  mixgtk_dialog_id_t dialog;  GtkWidget *widget;  GtkCheckMenuItem *menu;  const gchar *menu_name;  const gchar *config_key;  gboolean visible;  const gchar *toolbar_name;} window_info_t_;static window_info_t_ infos_[] = {  {MIXGTK_MIXVM_DIALOG, NULL, NULL, "mix_view", "MIX.view", FALSE, NULL},  {MIXGTK_MIXAL_DIALOG, NULL, NULL, "mixal_view", "MIXAL.view", FALSE,   "mixal_toolbar"},  {MIXGTK_DEVICES_DIALOG, NULL, NULL, "devices_view", "Devices.view",    FALSE, "devices_toolbar"}};static size_t INF_NO_ = sizeof (infos_) / sizeof (infos_[0]);static gboolean split_ = FALSE;static const gchar *TB_MENU_NAME_ = "show_toolbars";static GtkCheckMenuItem *tb_menu_ = NULL;static const gchar *VIEW_YES_ = "Yes";static const gchar *VIEW_NO_ = "No";/* flag marking that we are inside a restart process */static gboolean restart_ = FALSE;gbooleanmixgtk_wm_init (void){  split_ = mixgtk_config_is_split ();  if (split_)    {      gint i;      for (i = 0; i < INF_NO_; ++i)	{	  const gchar *view = mixgtk_config_get (infos_[i].config_key);	  infos_[i].visible = !view || !strcmp (VIEW_YES_, view);	  if (!view) mixgtk_config_update (infos_[i].config_key, VIEW_YES_);	  infos_[i].widget =	    mixgtk_widget_factory_get_dialog (infos_[i].dialog);	  g_return_val_if_fail (infos_[i].widget, FALSE);	  infos_[i].menu = GTK_CHECK_MENU_ITEM	    (mixgtk_widget_factory_get_child_by_name	     (MIXGTK_MAIN, infos_[i].menu_name));	  g_return_val_if_fail (infos_[i].menu, FALSE);	  if (infos_[i].visible) gtk_widget_show (infos_[i].widget);	  gtk_check_menu_item_set_active (infos_[i].menu, infos_[i].visible);	}    }  else    {      gint k;      for (k = 0; k < INF_NO_; ++k)	if (infos_[k].widget) gtk_widget_destroy (infos_[k].widget);    }  tb_menu_ = GTK_CHECK_MENU_ITEM    (mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN,					      TB_MENU_NAME_));  g_return_val_if_fail (tb_menu_, FALSE);  gtk_check_menu_item_set_active (tb_menu_, mixgtk_config_show_toolbars ());  mixgtk_wm_show_toolbars (mixgtk_config_show_toolbars ());  return TRUE;}voidmixgtk_wm_show_window (mixgtk_window_id_t w){  g_return_if_fail (w < INF_NO_);  if (!infos_[w].visible)    {      infos_[w].visible = TRUE;      gtk_check_menu_item_set_active (infos_[w].menu, TRUE);      mixgtk_config_update (infos_[w].config_key, VIEW_YES_);      gtk_widget_show (infos_[w].widget);    }}voidmixgtk_wm_hide_window (mixgtk_window_id_t w){  g_return_if_fail (w < INF_NO_);  if (infos_[w].visible && !restart_)    {      infos_[w].visible = FALSE;      gtk_check_menu_item_set_active (infos_[w].menu, FALSE);      mixgtk_config_update (infos_[w].config_key, VIEW_NO_);      gtk_widget_hide (infos_[w].widget);    }}voidmixgtk_wm_show_toolbars (gboolean show){  static const gchar *MAIN_TB_NAME = "main_toolbar";  GtkWidget *toolbar =    mixgtk_widget_factory_get_child_by_name (MIXGTK_MAIN, MAIN_TB_NAME);  if (toolbar != NULL)    {      if (show) gtk_widget_show (toolbar);      else gtk_widget_hide (toolbar);    }      if (split_)    {      int k;      for (k = 0; k < INF_NO_; ++k)	{	  if (infos_[k].toolbar_name != NULL)	    {	      GtkWidget *tb = mixgtk_widget_factory_get_child_by_name		(infos_[k].dialog, infos_[k].toolbar_name);	      if (show && tb) gtk_widget_show (tb);	      else if (tb) gtk_widget_hide (tb);	    }	}    }    mixgtk_config_set_show_toolbars (show);}/* callbacks */voidon_view_toggled (GtkCheckMenuItem *item){  if (!restart_)    {      gint k;      for (k = 0; k < INF_NO_; ++k)	if (item == infos_[k].menu) break;      g_return_if_fail (k < INF_NO_);      if (item->active)	mixgtk_wm_show_window (k);      else	mixgtk_wm_hide_window (k);      mixgtk_config_update (infos_[k].config_key,			    (item->active)? VIEW_YES_ : VIEW_NO_);      infos_[k].visible = item->active;    }}voidon_one_window_activate (){  mixgtk_config_set_split (FALSE);  restart_ = TRUE;  gtk_widget_destroy (mixgtk_widget_factory_get_dialog (MIXGTK_MAIN));}voidon_split_windows_activate (){  mixgtk_config_set_split (TRUE);  restart_ = TRUE;  gtk_widget_destroy (mixgtk_widget_factory_get_dialog (MIXGTK_MAIN));}voidon_window_hide (GtkWidget *w){  gint k;  for (k = 0; k < INF_NO_; ++k)    if (w == infos_[k].widget) break;  g_return_if_fail (k < INF_NO_);  mixgtk_wm_hide_window (k);}  voidon_main_window_destroy (GtkWidget *w, gpointer data){  if (restart_)    {      mixgtk_restart ();      restart_ = FALSE;    }  else gtk_main_quit ();}voidon_show_toolbars_toggled (GtkCheckMenuItem *item){  if (!restart_ && item->active != mixgtk_config_show_toolbars ())    mixgtk_wm_show_toolbars (item->active);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -