diff --git a/TeXmacs/tests/tmu/0310.tmu b/TeXmacs/tests/tmu/0310.tmu new file mode 100644 index 0000000000..5262a2129f --- /dev/null +++ b/TeXmacs/tests/tmu/0310.tmu @@ -0,0 +1,58 @@ +> + +> + +<\body> + 本讲义围绕钢结构轴心受力构件展开,涵盖轴心受拉与受压构件的核心知识点,包含三部分,贴合钢结构设计原理课程教学要求,兼顾理论推导与工程应用,可用于课堂授课、课后复习及设计参考。 + + <\enumerate> + :仅承受通过截面形心轴线的轴向力,分(受拉)和(受压)。 + + + + <\itemize> + 实腹式:整体连通,含热轧型钢(圆管 / 角钢 / H 型钢等)、组合截面(型钢 / 钢板拼接)、冷弯型钢(轻钢结构专用);型钢截面分 轴,惯性矩大)弱轴( 轴,惯性矩小)>。 + + 格构式:由肢件 + 缀件组成,常用双肢;实轴( 轴)过肢件腹板,虚轴( 轴)过缀件,易实现两主轴等稳定性,适用于大轴压荷载。 + + + :满足强度 / 刚度 / 稳定的前提下,用料经济、制作简便、便于连接,优先截面(提高抗弯刚度和稳定)。 + + + >|\19\1.6|)>-\\17.2>>||\19\-\18\17.2>>||\19\20.4-\18\17.2>>||\19\8489.664-\18\5088.448>>||->>||>>||*5809*c*m|)>>>>>>> + + \; + + |||||||||||||||||||||\\\>|\\\>|\>>|||| =\*|\>|)>|]>>|=\*|\>|)>|]>>|=3.9*>>||||=\*|\>|)>|]>>|=\*|\>|)>|]>>|=5.1*|t>>>||||=\*|\>|)>|]>>|=\*|\>|)>|]>>|=3.7*|t>>>>>>> + + \; + + 250\12+250\8=8000*m*m>,\ + + =8000-100\8=7200*>,\ + + =-|)>*h|]>=*274-242\250|]>=11345\10*m*m>, + + <\equation*> + I=2\*t*b+*h*t=2\\12\250+\250\8=3126\10*m*m, + + + =2\tb=3125\10mm)> + + <\equation*> + i=|A>>=11.91,i=|A>>=6.25. + + + 工字钢,翼缘为焰切边,则查表E-1,为b类截面, + + + ||||>|>>=>=0.8136,>>|>||\>=\62,查表E-4,\=0.796,>>|*A>>|10|0.796\8000>\314*N/m*m,>>|\100%>|5%,满*足.(实际规范不允许有任何偏差)>>>> + >> + + +<\initial> + <\collection> + + + + diff --git a/devel/0310.md b/devel/0310.md new file mode 100644 index 0000000000..3bba6417ed --- /dev/null +++ b/devel/0310.md @@ -0,0 +1,51 @@ +# [0310] 修复演讲模式下移动光标导致Windows任务栏闪烁的问题 + +## 1 相关文档 +- [dddd.md](dddd.md) - 任务文档模板 + +## 2 任务相关的代码文件 +- `src/Edit/Interface/edit_interface.cpp` +- `src/Plugins/Qt/qt_tm_widget.cpp` + +## 3 如何测试 + +### 3.1 确定性测试(单元测试) +```bash +xmake test test_all_integrated +``` + +### 3.2 非确定性测试(文档验证) +```bash +xmake run mogan +``` +1. 启动 Mogan,打开 TeXmacs/tests/tmu/0310.tmu。 +2. 通过菜单栏“视图 -> 演讲模式”进入全屏。 +3. 在屏幕内随意移动鼠标,或者点击不同的文档元素(文本、公式等)。 +4. 观察 Windows 底部的任务栏是否会闪烁。 +5. 按下 `Esc` 退出全屏,在文中多种环境中进行切换,检查焦点工具栏是否正常恢复并与当前光标位置的环境相符。 + +## 4 如何提交 + +提交前执行以下最少步骤: + +```bash +bin\format.bat +xmake build mogan-gui +``` + +## 5 What +修复了在全屏演讲模式下,移动光标会触发 Windows 任务栏闪烁的问题。 + +1. 在 C++ 核心逻辑中,阻止了全屏模式下向 Qt 层发送不必要的菜单和工具栏更新(`update_menus`)。 +2. 在退出全屏模式时,强制触发一次菜单更新,以同步当前光标环境状态。 +3. 修正了 Qt 层级针对 `set_full_screen` 的重复设置问题,并在 `install_main_menu` 中移除了会破坏隐藏状态的 `setVisible(true)` 强制调用。 + +## 6 Why +Mogan 在光标移动跨越不同内容环境(如文本、公式等)时,会自动触发界面状态的更新,向 GUI 层发送重新构建工具栏与菜单的指令。在普通窗口模式下,这是正常的功能展示;但在全屏演讲模式下,尽管工具栏在视觉上是被隐藏的,Qt 侧依然会接收指令执行销毁和重建旧控件的操作,进而触发 `QMainWindow` 的布局重算(Layout Recalculation)。 + +在 Windows 系统中,DWM (桌面窗口管理器) 判定隐藏任务栏的标准是当前激活窗口是否填满屏幕且无边框。Qt 在重算布局的微小瞬间打破了这一平衡状态,导致 Windows 误认为全屏失效,将系统任务栏绘制了出来,从而在肉眼上表现为闪烁。 + +## 7 How +1. **源头拦截重绘指令**:在 `src/Edit/Interface/edit_interface.cpp` 的 `edit_interface_rep::update_menus()` 函数开头,加入 `get_server()->in_full_screen_mode()` 判断。若在全屏模式则直接返回,切断所有 `SERVER(...)` 通信。这从逻辑源头消除了不可见控件的刷新开销。 +2. **恢复同步状态**:在同一个文件内的 `edit_interface_rep::full_screen_mode(bool flag)` 退出全屏分支中,主动调用 `notify_change(THE_MENUS)`。保证退出全屏的那一刻,界面能拉取最新的菜单和工具栏布局,避免显示过期工具栏。 +3. **修复 Qt 端实现**:在 `src/Plugins/Qt/qt_tm_widget.cpp` 中,为 `set_full_screen` 加入重复检查;并修改 `install_main_menu`,避免在更新菜单时强制让隐藏的菜单栏可见。 diff --git a/src/Edit/Interface/edit_interface.cpp b/src/Edit/Interface/edit_interface.cpp index b0d8369953..55b2bf43cc 100644 --- a/src/Edit/Interface/edit_interface.cpp +++ b/src/Edit/Interface/edit_interface.cpp @@ -816,6 +816,12 @@ edit_interface_rep::update_menus () { bool is_startup= is_startup_tab_buffer (buf->buf->name); bool is_chat = is_chat_tab_buffer (buf->buf->name); bench_start ("update_menus"); + + if (get_server ()->in_full_screen_mode ()) { + bench_end ("update_menus"); + return; + } + if (!is_startup && !is_chat) SERVER (menu_main ("(horizontal (link texmacs-menu))")); if (!is_startup && !is_chat) @@ -1284,6 +1290,9 @@ void edit_interface_rep::full_screen_mode (bool flag) { full_screen= flag; send_invalidate_all (this); + if (!flag) { + notify_change (THE_MENUS); + } } void